C递归函数计算阶乘



我刚刚开始学习C编程,并认为我将从计算一个数的阶乘这一非常基本的问题开始。我的代码输出正确的值,直到阶乘为13,然后在输入>13时给出错误的答案。我的代码是:

#include<stdio.h>
long int factorial(int);
int main()
{
    int num;
    long int fact;
    printf("Please type the number you want factoralized: ");
    scanf("%d",&num);
    fact = factorial(num);
    printf("%d",fact);
    return 0;
}
long int factorial(int dig)
{
    long int facto;
    if (dig>1)
        facto = dig * factorial(dig-1);
    else if (dig=1)
        facto = 1;
    return facto;
}

当我输入13时,它返回1932053504,而不是预期的6227020800

您的平台上可能溢出了LONG_MAX值,从而导致未定义的行为。您可以使用unsigned long(或signed long long),但它们也不会持续太久。

您的选择在此受到限制。您可以使用支持任意大整数的库,例如GNUGMP。否则,你将不得不像GMP一样自己实施。

另一方面,

else if (dig=1)

不是你想要的。应该是

else if ( dig == 1 )

或者您可以在这里简单地使用else {...},除非您打算检查负数。

最新更新