问答详情
源自:5-7 递归函数(一)

下面这段代码里面为什么计算30的阶乘的时候是对的, 31的时候就开始为负了,到34的时候就为0了?

#include <stdio.h>
int factorial(int n){
    int result;
    if(n<0)
        {
        printf("输入错误!\n");
        
        }
    else if (n==0||n==1)
        {
        result=1;
    }
    else
        {
        result=factorial(n-1)*n;
        
    }
return result;    
}
int main()
    {
    int n=31;
    printf("%d的阶乘=%d\n",n,factorial(n));
    return 0;
}

提问者:wjun0 2016-02-19 14:52

个回答

  • 七九九
    2016-03-03 10:41:58

    int类型前面讲过是4字节,也就是占用32位,有符号,因此取值范围是-2^31~2^32-1,也就是-2147483648~2147483647,你算的数远远超出了这个范围,早就有问题了。一个位中放一个1或0;前面的一些超出位的被自动舍弃,导致第一位可能是1或0,因此异常数据有时是正数、有时是负数。确切来讲,在这个程序中,n>=14都是错误的。

  • catindark
    2016-03-01 22:05:56

    是因为最后值超出int取值范围 导致数据溢出了么?

  • 一个人默默往前走
    2016-02-19 15:07:09

    我运行你的函数。没有抱错。http://img.mukewang.com/56c6bf1300014ef607480598.jpg。。直接复制的