遞迴演算法
因為遞迴需要不斷的呼叫自身,當n過大的時候,程式將會很慢效率不高,不推薦使用,關於遞迴實現演算法,也很簡單,很多教科書上都是這種解法。
//遞迴演算法
long long fibonacci(unsigned int n)
非遞迴演算法
我主要講述一下非遞迴演算法的實現,非遞迴演算法是比較實用的,也是面試官比較喜歡的一種方法
遞迴的**之所以慢是因為重複的計算太多,我們只需要想辦法避免重複計算就好了。比如我們將已經得到的數列中間項儲存起來,如果下次需要計算的時候我們先查一下,如果前面已經計算過了句不用重複計算了,更簡單的辦法就是從下往上計算,首先呢根據f(0)和f(1)算出f(2),再根據f(1)和f(2)算出f(3)以此類推就可以算出n項了,很容易理解,複雜度為o(n):
//非遞迴演算法
long long fibonacci(unsigned int n)
; if (n < 2)
return result[n];
long long fibone = 0;
long long fibtwo = 1;
long long fibn = 0;
for (unsigned int i = 2; i <= n; i++)
return fibn;
}
Fibonacci數列的遞迴與非遞迴實現
fibonacci 斐波那契 數列定義 1 遞迴實現 思想簡單,無需贅述,實現如下 遞迴方法複雜度o 2 n 計算到n 41已達到計算機的極限 int f int n int fibonacci1 int len 該方法存在很多重複計算,雖然是典型的遞迴,但效率很低,資源消耗大。經分析,改演算法時間...
Fibonacci數列 遞推 遞迴
無窮數列1,1,2,3,5,8,13,21,34,55,稱為fibonacci數列。它可以遞迴地定義為 第n個fibonacci數可遞迴地計算如下 int fibonacci int n 編寫完整的主函式,分別記錄利用上述遞迴函式求第45,46,47,48個fibonacci數所花費的時間。程式 p...
遞迴 迴圈實現Fibonacci數列
程式實現的 1 1 2 3 5 8 13 21 34 55 這麼乙個數列的功能 數列索引index 1,2 n 方法一 利用函式遞迴實現fibonacci數列 include include define n 10 static int print fibonacci int index int m...