背景:
假定你有一雄一雌一對剛出生的兔子,它們在長到乙個月大小時開始交配,在第二月結束時,雌兔子產下另一對兔子,過了乙個月後它們也開始繁殖,如此這般持續下去。每只雌兔在開始繁殖時每月都產下一對兔子,假定沒有兔子死亡,在一年後總共會有多少對兔子?
在一月底,最初的一對兔子交配,但是還只有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級台階有幾種不同的走法?這就是乙個斐波那契數列 登上第一級台階有一...