为什么我计算阶乘的简单 C 代码不起作用

Why my simple C code to calculate factorial not working

如果我输入零或负值,则以下代码 returns 正确。但是,如果我输入任何正值,它什么都不做。
有人可以解释为什么吗?我的期望是,它应该 return 正数的阶乘。

#include<stdio.h>

int functionfact(int);

void main()
{
    int x,fact;

    printf("Input an integer value:\n");
    scanf("%d",&x);

    if (x<0)
        printf("Please enter positive value!!");

    else if (x==0)
        printf ("The factorial of 0 is 1");

    else
    {
       fact=functionfact(x);
       printf("The factorial of %d is %d",x,fact);
    }
}

int functionfact(int n)
{
    return(n*functionfact(n-1));
}

正如 Eric 所指出的,函数现在无法确定何时停止。

只要把函数改成

就可以了
int functionfact(int n)
{
    return n > 0 ? (n*functionfact(n-1)) : 1;
}

我对 Kalbi 的提议投了赞成票,但我会把它写成:

int functionfact(int n)
{
    if (n > 0) {
        return n * functionfact(n-1);
    } else {
        return 1;
    }
}

让我们面对现实:这个问题是由正在学习递归基础知识的初学者提出的。最好先完全了解如何处理此类编程(因为我们之前都在努力解决它,递归并不容易),然后再做一些典型的 C oneliner。

你好亲爱的!

函数functionfact没有任何终止条件。你可以试试这个...

int functionfact(int n)
    {
        if(n>1)
        return(n*functionfact(n-1));
    }

希望你能得到答案。