【发布时间】:2021-06-25 19:10:41
【问题描述】:
我正在解决这个问题...但是我不知道为什么当输入大于 200 的数字时它会变成无限循环。我使用了递归函数。而我也只能使用这个功能。我该怎么办?
#include <stdio.h>
int f(int n){
if (n<=0) return 0;
else if(n==1 || n==2) return 1;
else {
return f(n-1)+f(n-2);
}
}
int main()
{
int n;
scanf("%d", &n);
printf("%d", f(n));
return 0;
}
【问题讨论】:
-
因为
int这个数字太大了 -
符合
int的最大斐波那契数是n=46 -
其实这不是一个无限循环,它只是一个非常非常长的循环。计算斐波那契数是一个经典示例(可能是经典示例),说明何时不应该使用递归(至少,不能没有memoization)。
-
对于 n=46,我的计算机(一台速度相当快的现代笔记本电脑)需要 10 多秒才能(正确)计算出值 1836311903。对于 n=200,我估计需要 9,203,321,947,172,577,060,265,858 年。
-
@SteveSummit 只有几十亿个宇宙的生命周期。你赶时间吗?
标签: c