Fibonacci数-递归

songyc907 2012-12-21 06:35:23
下面是我写的关于求斐波那契数的递归程序:

#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,程序一运行就出错呢?
...全文
140 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
色拉油 2012-12-22
  • 打赏
  • 举报
回复
溢出了,莫非楼主不知道递归来做这种东西的威力? 老老实实用迭代算吧啊
AnYidan 2012-12-22
  • 打赏
  • 举报
回复
求斐波那契数用递归,效率底下
渔歌向晚 2012-12-22
  • 打赏
  • 举报
回复
哥们。 现在 的int 一般都是 4个字节,最大表示值为 : 4^31。 大概20 多亿吧··貌似。 所以 int 取50000000 不会溢出。楼上的回答有问题。 溢出的不是 int 而是 因为 递归的层次 太多了,递归函数的执行是在栈里面的,栈空间本来就小,根本装不下那么多 的递归,所以栈溢出了。
十八道胡同 2012-12-21
  • 打赏
  • 举报
回复
溢出。。 int才多大,,你输出前几个Fibonacci的值就知道
DaiwjDev 2012-12-21
  • 打赏
  • 举报
回复
首先 int n=50000000 已经是不合法的了,而且你还int re,fib()递归增长很快的,得到的 re 可能都会超出 long int的范围了!
14号选手 2012-12-21
  • 打赏
  • 举报
回复
溢出了 int是有范围的

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧