Fibonacci数-递归
下面是我写的关于求斐波那契数的递归程序:
#include <stdio.h>
#include <math.h>
int Fibonacci(int n){
if(n==1){
return 1;
}
else if(n==2){
return 1;
}
else{
return Fibonacci(n-1)+Fibonacci(n-2);
}
}
int main(){
int n=50000000;
int re=Fibonacci(n);
printf("%d\n",re);
return 0;
}
不明白为啥当n取值不大的时候,可以正确运行出来,但是当n很大,例如算例中的 50000000,程序一运行就出错呢?
[解决办法]
哥们。 现在 的int 一般都是 4个字节,最大表示值为 : 4^31。 大概20 多亿吧貌似。
所以 int 取50000000 不会溢出。楼上的回答有问题。
溢出的不是 int 而是 因为 递归的层次 太多了,递归函数的执行是在栈里面的,栈空间本来就小,根本装不下那么多 的递归,所以栈溢出了。