斐波那契數列的遞迴,迭代(迴圈),通項公式三種實現

2021-06-08 04:51:05 字數 1038 閱讀 4102

fibonacci數列是指這樣一種數列,它的前兩項均為1,從第三項開始各項均為前兩項之和。用數學公式表示出來就是:

1                            (n=1,2)

fib(n)=

fib(n-1)+fib(n-2)     (n>2)

可以證明斐波那契數列的通項公式為fib(n) = [(1+√5)/2]^n /√5 - [(1-√5)/2]^n /√5 (n=1,2,3.....),關於斐波那契數列的詳細介紹請參閱

下面我將介紹三種比較常用的求解第n項斐波那契數列的方法:遞迴法、迭代法、通項公式法。

1、遞迴法

這種方法的優點是簡潔和容易理解,缺點是時間複雜度太大,隨著n的增大,運算時間將會急劇增加。因此在很多場合這種方法是不可取的。

使用這種方法的關鍵**是:

if(n == 1|| n== 2)  else

2、迭代法

這種方法相對於遞迴法來說在時間複雜度上減小了不少,但**相對就要複雜些了。它的思想是這樣的,假設開始時f0=1,f1=1,currentfib表示當前斐波那契數,則:

for(i = 1;i < n;i++)

這樣迭代結束和currentfib就是fib(n)了。

3、通項公式法

這種方法是最沒技術含量的方法,只要你知道通項公式照著把它翻譯成程式語言就可以了,優點不言而喻。

fib(n) = pow(((1 + sqrt(5)) / 2.0),n) / sqrt(5) - pow(((1 - sqrt(5)) / 2.0),n) / sqrt(5));

小結:這三種方法各有優缺點,使用哪種方法根據實際情況確定,從時間複雜度上來說o(通向公式法)下面我做了乙個簡單的測試:分別測試這三種方法計算0-30這31個斐波那契數所用的總時間。從測試結果看,遞迴確實很費時,特別是n在30以後計算起來就很費時了,而另外兩種方法計算這31個斐波那契數所費時間基本為0。當然結果不會很準確,但至少能說明問題。

斐波那契數列通項公式

斐波那契數列指的是每一項都等於前兩項之和的數列,定義為f 1 1,f 2 1,f n f n 1 f n 2 n 3 我們先來研究形如f n c1f n 1 c2f n 2 的數列。對於這樣的數列,f n xf n 1 與f n 1 xf n 2 的比值一定是乙個定值,即 將其進行移項運算,得 對應...

迴圈斐波那契數列 斐波那契數列應用

什麼是斐波那契數列 斐波那契數列指的是這樣乙個數列 1,1,2,3,5,8,13,21,34,55,89,144 這個數列從第3項開始,每一項都等於前兩項之和 台階問題 有一段樓梯有10級台階,規定每一步只能跨一級或兩級,要登上第10級台階有幾種不同的走法?這就是乙個斐波那契數列 登上第一級台階有一...

斐波那契數列,遞迴與迴圈

斐波那契數列 fibonacci sequence 又稱 分割數列 兔子數列,是數學家列昂納多 斐波那契於1202年提出的數列。斐波那契數列為1 1 2 3 5 8 13 21 34 此數列從第3項開始,每一項都等於前兩項之和,遞推公式為f n f n 1 f n 2 n 3,f 1 1,f 2 1...