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

来源:5-7 递归函数(一)

wjun0

2016-02-19 14:52

#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;
}

写回答 关注

3回答

  • 七九九
    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。。直接复制的

C语言入门

C语言入门视频教程,带你进入编程世界的必修课-C语言

926025 学习 · 20793 问题

查看课程

相似问题