2014-10-19 65 views
2

我知道斐波那契算法可以在不遞歸這樣的編程:是不是遞歸線性的斐波那契算法?

int fibo(int n){ 
if(n <= 1){ 
    return n; 
} 
int fibo = 1; 
int fiboPrev = 1; 
for(int i = 2; i < n; ++i){ 
    int temp = fibo; 
    fibo += fiboPrev; 
    fiboPrev = temp; 
} 
return fibo; 
} 

,也該遞歸斐波那契具有複雜度O(2^k)的約,但我所看到的非遞歸算法是O(n);所以它看起來更有效率,是不是我的微積分還是非遞歸解決方案中存在任何隱藏的複雜性?

+2

不同的算法可能會有不同的複雜性,即使它們計算相同的東西。防爆。有幾個「O(n^2)」排序算法,還有幾個「O(n log n)」排序算法。 – 2014-10-19 14:44:10

+0

另外看看斐波那契數可以表示爲一個單一的非遞歸方程:http://mathworld.wolfram.com/BinetsFibonacciNumberFormula.html – Esse 2014-10-19 15:09:37

回答

2

獨立評估實現的複雜性。在這種情況下,與輸入n相關的複雜度由for循環定義,它與n的大小成正比。因此,複雜度是O(n) - 線性的。

+1

但是還有一個額外的因素:斐波納契數的位數增加隨着序列的繼續。所以計算一個的複雜性對於恆定的位大小是線性的(因此對於可以計算的數的計數有限制),但是對於可變的位大小,它將不是線性的。 – chbaker0 2014-10-19 18:10:55