【发布时间】:2018-05-31 22:46:08
【问题描述】:
我有一个使用递归打印斐波那契数列的程序。有更好的方法,但我被要求使用递归,所以我不得不这样做。
这是程序:
#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,程序需要很长时间才能完成。
我已经通过this answer 并且无法理解他们是如何解决它的,但看起来像
fibo(int n) 的时间复杂度为 O(2^n)
再一次,我可能完全错了,但我只想:
这个完整程序的时间复杂度是多少,简要说明你是如何计算的?
如果您有更好的使用递归计算斐波那契的方法,也欢迎。
【问题讨论】:
-
我认为递归斐波那契在 O (n^6) 附近,因为直接计算表明它是 n^6 的最高项,但我无法检查。
-
你到底是从哪里得到 n^6 的?!它是指数型的,因为它需要与计算值一样长的时间(所有递归分支都以值为 1 的叶子结尾)
-
我认为来自比内的公式
-
:) @Dragonthoughts
标签: time-complexity big-o complexity-theory asymptotic-complexity code-complexity