什麼是遞迴?
遞迴是將複雜問題遞推分解為最簡問題,然後將結果回歸的過程。
比如:去電影院看電影,隨便坐到乙個座位,問前面的人,這是第幾排,前面的人也不知道,再問更前面的人,直到問到第一排,最後把結果傳回來。
斐波那契是中世紀義大利的數學家,他的突出貢獻是把阿拉伯文本帶入了歐洲,代替了當時的羅馬文字,對歐洲數學的發展起到了很大的推動作用。他在27歲時寫了一本《計算之書》,裡面提到乙個有關兔子的數列。
書中是這樣說的,有一對大兔子,每個月能夠繁衍出一對小兔子(一公一母),而小兔子經過乙個月可以生長為大兔子,現在有一對小兔子,假設兔子們都不死,請問一年後,有多少對兔子?
我們先來通過具體例項推導一下,
兔子數量 具體的兔子
第乙個月 m1 1 a
第二個月 m2 1 a~ (用「~」代表生長中)
第三個月 m3 2 a->b (用「->」代表繁衍)
第四個月 m4 3 a->c + b~
第五個月 m5 5 a->d + b->e + c~
第六個月 m6 8 a->f + b->g + c->h + d~ + e~
可以看出,似乎存在著某種規律。
存活的兔子可以分為兩類,一類是n-1個月已經存在的兔子,一類是第n個月新繁衍的兔子。
新繁衍的兔子 = 已經生長好的大兔子 = 第n-2個月出生的兔子m(n-2)
由此,得出公式,mn = m(n-1) + m(n-2)
轉化為**如下
publicclass
fibonaccitest
/*** 1 總結遞迴規律
* 2 確定遞迴結點
*/public
static
int fib(int
n)
//f(5) -> f(4) + f(3)
//f(3) + f(2) + f(2)+f(1)
//f(2)+f(1)
return fib(n-1)+fib(n-2);
}}
Python演算法 斐波那契數列
典型的遞迴演算法 快速排序會用到 先做個鋪墊 斐波那契數列即著名的兔子數列 1 1 2 3 5 8 13 21 34 數列特點 該數列從第三項開始,每個數的值為其前兩個數之和,用python實現起來很簡單 定義fibonacci數列如下 非遞迴方法的函式實現 def fibs num result ...
演算法之斐波那契數列
斐波那契數列 fibonacci sequence 又稱 分割數列 因數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 斐波那契當時是為了描述如下情況的兔子生長數目 第乙個月初,有一對剛誕生的兔子 第二個月之後 第三個月初 它們可以生育 ...
斐波那契數列Log n 演算法
想法源於題目 乙個人一次可以上乙個台階,也可以上兩個台階,問上到20級台階有多少種走法?這就是乙個斐波那契數列 登上第一級台階有一種登法 登上兩級台階,有兩種登法 登上 台階,有三種登法 登上四級台階,有五種方法 所以,1,2,3,5,8,13 我們也會發現 f 3 f 2 f 1 f 4 2 f2...