一个关于阶乘的算法问题
程序如下:#include <stdio.h>
int main()
{
int fact(int n);
int n;
printf("input an interger number:");
scanf("%d",&n);
printf("%d!=%ld\n",n,fact(n));
return 0;
}
int fact(int n)
{
if(n<0)
printf("n<0,data error!");
else if(n==0||n==1)
return 1;
else
return(fact(n-1)*n);
}
我调试发现,在12以内包括12,得出的结果是正确的。但是从13开始,输出的数据就不对了。开始我认为是数据溢出,但是更改了数据类型之后结果还是不对?
求解释一下问题处在哪里?