C递归函数计算因子

时间:2014-11-11 23:48:49

标签: c recursion factorial

我刚刚开始学习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

1 个答案:

答案 0 :(得分:3)

您可能会在平台上溢出LONG_MAX值,导致未定义的行为。您可以使用 unsigned long (或 unsigned long long ),但它们也不会持续更长时间。

您的选择仅限于此。您可以使用支持任意大整数的GNU GMP等库。否则,您必须自己实施,类似于GMP。

另一方面,

else if (dig=1)

不是你想要的。它应该是

else if ( dig == 1 )

或者您可以在此处使用else {...},除非您打算检查否定数字。