#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;
}
int类型前面讲过是4字节,也就是占用32位,有符号,因此取值范围是-2^31~2^32-1,也就是-2147483648~2147483647,你算的数远远超出了这个范围,早就有问题了。一个位中放一个1或0;前面的一些超出位的被自动舍弃,导致第一位可能是1或0,因此异常数据有时是正数、有时是负数。确切来讲,在这个程序中,n>=14都是错误的。
是因为最后值超出int取值范围 导致数据溢出了么?
我运行你的函数。没有抱错。。。直接复制的