【问题标题】:C recursive function to calculate FactorialC递归函数计算阶乘
【发布时间】:2015-01-08 16:51:49
【问题描述】:

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

【问题讨论】:

    标签: c recursion factorial


    【解决方案1】:

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

    您的选择有限。您可以使用支持任意大整数的库,例如 GNU GMP。否则,您必须自己实现它,类似于 GMP。

    另一方面,

    else if (dig=1)
    

    不是你想要的。应该是

    else if ( dig == 1 )
    

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

    【讨论】:

    • 使用 = 和 == 有什么区别我明白为什么我可以使用最后一部分但为什么需要 == 而不是 =
    • = 是赋值,== 是为了比较。如果您执行if (dig=1),它会将1 分配给dig,结果条件为true
    猜你喜欢
    • 2015-04-19
    • 2017-04-19
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 2015-04-16
    相关资源
    最近更新 更多