我有一个使用递归打印斐波那契数列的程序。有更好的方法,但我被要求使用递归,所以我不得不这样做。
这是程序:
#include <stdio.h>
#define TERMS 10
long fibo(int);
int main(void){
for(int i = 1; i <= TERMS; i++) {
printf("%ld", fibo(i));
}
return 0;
}
long fibo(int n){
if (n < 3) {
return 1;
}
else {
return fibo(n - 1) + fibo(n - 2);
}
}
我知道这对于斐波那契数列来说确实是一种糟糕的方法,从上面可以清楚地看出,当TERMS超过 35 时,程序需要很长时间才能完成。
我已经完成了这个答案,无法理解他们是如何解决的,但看起来像
fibo(int n) 的时间复杂度为 O(2^n)
同样,我可能完全错了,但我想要的是:
这个完整程序的时间复杂度是多少,简要解释一下你是如何计算的?
如果您有更好的使用递归计算斐波那契的方法,也欢迎。