趣學演算法 你不知道的「斐波那契數列」

2022-08-30 18:54:07 字數 1124 閱讀 3523

什麼是遞迴?

遞迴是將複雜問題遞推分解為最簡問題,然後將結果回歸的過程。

比如:去電影院看電影,隨便坐到乙個座位,問前面的人,這是第幾排,前面的人也不知道,再問更前面的人,直到問到第一排,最後把結果傳回來。

斐波那契是中世紀義大利的數學家,他的突出貢獻是把阿拉伯文本帶入了歐洲,代替了當時的羅馬文字,對歐洲數學的發展起到了很大的推動作用。他在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)

轉化為**如下

public

class

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...