動態規劃 斐波那契數列

2021-09-10 16:25:15 字數 1547 閱讀 2168

問:

大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。

n<=39

斐波那契數列簡單介紹

我的解法:

注:從fibonacci(n-1)+fibonacci(n-2)明顯看出使用的是遞迴,此題用遞迴兩三行**即可搞定。但是,若出題者準備著乙個超大的n,那麼很有可能會 stack overflow(遞迴的本質就是棧),為什麼會棧溢位?因為重複計算,舉個栗子:

當n=4時,

fibonacci(4) = fibonacci(3) + fibonacci(2)

​ = fibonacci(2) + fibonacci(1) + fibonacci(1) + fibonacci(0)

​ = fibonacci(1) + fibonacci(0) + fibonacci(1) + fibonacci(1) + fibonacci(0);

由於我們的**並沒有記錄fibonacci(1)和fibonacci(0)的結果,對於程式來說它每次遞迴都是未知的,因此光是n=4時fibonacci(1)就重複計算了3次之多。

其他解法:

注:動態規劃(dynamic programming)。

動態規劃簡單介紹

動態規劃演算法也可以說是 『記住求過的解來節省時間』;

動態規劃演算法的核心就是記住已經解決過的子問題的解。

上述**需要用到三個數進行操作(prenum、preprenum、result),實際上可以簡化為兩個數,從而節省空間,**如下:

public

static

intfibonacci

(int n)

return pre;

}

python斐波那契數列動態規劃

斐波那契類似於1 1 2 3 5 8這樣的數列,當前項等於前兩項之和。根據這個規律就可以用遞迴來做,可是當數字很大的時候,遞迴耗時很長,因此可以採用動態規劃來做。動態規劃 deffeibonacci1 n array 0 1 while len array n 1 array 2 return ar...

演算法 動態規劃篇 斐波那契數列

斐波那契數列,又稱 分割數列,指的是這樣乙個數列 0 1 1 2 3 5 8 13 21 在數學上,斐波納契數列以如下被以遞迴的方法定義 f0 0,f1 1,fn f n 1 f n 2 n 2,n n 在現代物理 準晶體結構 化學等領域,斐波納契數列都有直接的應用,為此,美國數學會從1960年代起...

演算法 動態規劃篇 斐波那契數列

斐波那契數列,又稱 切割數列。指的是這樣乙個數列 0 1 1 2 3 5 8 13 21 在數學上,斐波納契數列以例如以下被以遞迴的方法定義 f0 0,f1 1,fn f n 1 f n 2 n 2,n n 在現代物理 準晶體結構 化學等領域,斐波納契數列都有直接的應用。為此。美國數學會從1960年...