斐波那契數列的演算法研究

2021-06-21 09:20:47 字數 1585 閱讀 1973

背景:

假定你有一雄一雌一對剛出生的兔子,它們在長到乙個月大小時開始交配,在第二月結束時,雌兔子產下另一對兔子,過了乙個月後它們也開始繁殖,如此這般持續下去。每只雌兔在開始繁殖時每月都產下一對兔子,假定沒有兔子死亡,在一年後總共會有多少對兔子?

在一月底,最初的一對兔子交配,但是還只有1對兔子;在二月底,雌兔產下一對兔子,共有2對兔子;在三月底,最老的雌兔產下第二對兔子,共有3對兔子;在四月底,最老的雌兔產下第三對兔子,兩個月前生的雌兔產下一對兔子,共有5對兔子;……如此這般計算下去,兔子對數分別是:1, 1, 2, 3, 5, 8, 13, 21, 34, 55,89, 144, ...看出規律了嗎?從第3個數目開始,每個數目都是前面兩個數目之和。這就是著名的斐波那契(fibonacci)數列。

有趣問題:

1

,有一段樓梯有

10級台階

,規定每一步只能跨一級或兩級

,要登上第

10級台階有幾種不同的走法

?

答:這就是乙個斐波那契數列:登上第一級台階有一種登法;登上兩級台階,有兩種登法;登上**台階,有三種登法;登上四級台階,有五種方法……所以,1,

2,3,

5,8,

13……登上十級,有

89種。

2

,數列中相鄰兩項的前項比後項的極限是多少,就是問,當

n趨於無窮大時,

f(n)/f(n+1)

的極限是多少?

答:這個可由它的通項公式直接得到,極限是

(-1+

√5)/2

,這個就是所謂的**分割點,也是代表大自然的和諧的乙個數字。

數學表示:

fibonacci

數列的數學表示式就是:

f(n) = f(n-1) + f(n-2)

f(1) = 1

f(2) = 1

遞迴程式

1:

fibonacci

數列可以用很直觀的二叉遞迴程式來寫,用

c++語言的描述如下:

long fib1(int n)

else

}

遞迴效率較低。

迭代解法:

fibonacci

數列用迭代程式來寫也很容易,用

c++語言的描述如下:

//也可以用陣列將每次計算的f(n)儲存下來,用來下次計算用(空間換時間)

long fib3 (int n)

return y;

}

這時程式的效率顯然為o(

n),n = 45

的時候<1s

就能得到結果。

斐波那契數列的研究

讀昨天剛買的 android應用效能優化 第一章介紹了斐波那契數列的實現及優化,這是演算法方面的問題。斐波那契數列,又稱 分割數列,指的是這樣乙個數列 0 1 1 2 3 5 8 13 21 在數學上,斐波納契數列以如下被以遞迴的方法定義 f0 0,f1 1,fn f n 1 f n 2 n 2,n...

斐波那契數列 斐波那契數列python實現

斐波那契數列 fibonacci sequence 又稱 分割數列 因數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的是這樣乙個數列 1 1 2 3 5 8 13 21 34 在數學上,斐波納契數列以如下被以遞推的方法定義 f 1 ...

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

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