Python中斐波那契數列

2021-01-07 溪流在心中

今天我們來說說一幫小兔子 。

按理來說,今天的話題與兔子不搭邊。 所以本節就講講如何用遞歸實現斐波那契數列。

斐波那契數列的發明者,是義大利數學家列昂納多*斐波那契(Leomuado Fibonacci)。

當年這個數列是由兔子交配的故事開始講起的:假如說兔子在出生兩個月後,就有了繁殖能力,此後這對兔子在接下來的每個月都能生出一對可愛的小兔子。假設所有兔子都不會老去,就這麼一直折騰下去,那麼一年以後可以繁殖多少對免子出來呢?

我們都知道兔子繁殖能力是驚人的:

假設需要求出經歷了 20個月後,總共有多少對小兔子,不妨考慮一下分別用迭代和遞歸如何實現?

迭代實現:

def fab(n):

a1 = 1

a2 = 1

a3 = 1

if n < 1:

print('輸入有誤!')

return -1

while (n-2) > 0:

a3 = a1 + a2

a1 = a2

a2 = a3

n -= 1

return a3

result = fab(20)

if result != -1:

print('總共有%d對小兔子誕生!', % result)

遞歸實現:

def fab(n):

if n < 1:

print('輸入有誤!')

return -1

if n == 1 or n == 2:

return 1

else:

return fab(n-1) + fab(n-2)

result = fab(20)

if result != -1:

可見邏輯非常簡單,直接把所想的東西寫成代碼就是遞歸算法了。不過,之前總說遞歸如果使用不當,效率會很低,但是有多低呢?這就來證明一下。我們試圖把20個月修改為35個月,然後試試看把程序執行起來。發現了吧,用迭代代碼來實現基本是毫秒級的,而用遞歸來實現就考驗你的CPU能力啦(N秒~N分鐘不等)。這就是小甲魚不支持大家所有東西都用遞歸求解的原因,本來好好的一個代碼,用了遞歸,效率反而拉下了一大截。

如果不懂得遞歸,試圖想要寫個程序來解決問題是相當困難的,但如果使用了遞歸,你會發現問題奇蹟般地變簡單了!

相關焦點

  • python邏輯控制總結——斐波那契數列
    斐波那契數列斐波那契數列在數學上,是一個特殊的數列,它的特徵如下:1. 第一項和第二項均為1。2. 從第三項開始,每一項均是前面兩項的和。如下:我們嘗試在控制臺輸出一個斐波那契數列的前10項。新建一個test1.py,代碼如下:
  • Python實現斐波那契數列的幾種方法
    斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖為例子而引入,故又稱為「兔子數列」,指的是這樣一個數列:1、1、2、3、5、8、13、21、34、……在數學上,斐波納契數列以如下被以遞推的方法定義
  • 斐波那契數列與矩陣乘法的聯繫以及其python實現
    斐波那契數列    即     1、1、2、3、5、8、13、21、34、以此類推,在很多面試題中,面試官都會讓你手寫斐波那契數列的實現。
  • 神奇的斐波那契數列 ——自然界中的斐波那契數列
    而對這些自然、社會以及生活中的許多現象的解釋,最後往往都能歸結到斐波那契數列上來。斐波那契數列在數學理論上有許多有趣的性質。不可思議的是在自然界中也存在著這個性質,似乎完全沒有秩序的植物彼此相隔的距離或葉子的生長,都被斐波那契數列支持著。例如,樹木的生長,由於新生的枝條,往往需要一段「休息」時間,供自身生長,而後才能萌發新枝。
  • 帕斯卡三角形中的斐波那契數列
    今天我再補充介紹如何從這個著名的三角形出發,得到斐波那契數列。下圖就是著名的帕斯卡三角形的前8行。它的一個重要性質就是:兩腰上的數字全都是「1」,中間的數字,是它的肩上兩個數字之和,即它的左上方數字和右上方數字之和。比如,6=3+3;15=5+10或15=10+5。上圖中您看出斐波那契數列在什麼地方嗎?似乎不太容易看出來吧。
  • 斐波那契數列
    比薩的李奧納多,又稱斐波那契,中世紀義大利數學家發現了裴波那契數列1、1、2、3、5、8……【即後一數字為前面兩個數字之和】斐波那契螺線:1+1=21+2=32+3=5……34+55=89斐波那契數與黃金數是密切聯繫:相鄰兩個斐波那契數的比近似等於黃金數,數目越大,則越接近,當無窮大時,其比就等於黃金分割數。
  • 神奇的斐波那契數列
    在自然界中,有一個最為神奇、幾百年來一直被人們熱議的數列,那就是「兔子數列」,也叫做斐波那契數列。點開視頻學習一下吧!一. 阿拉伯數字在十二世紀之前的歐洲,由於宗教原因,科學和數學的發展非常緩慢。歐洲人還習慣於使用羅馬數字計數。
  • 奇妙的斐波那契數列
    義大利的數學家列昂那多·斐波那契在1202年研究兔子產崽問題時發現了此數列。斐波那契在《計算之書》中提出了一個有趣的兔子問題:假設一對初生兔子要一個月才到成熟期,而一對成熟兔子每月會生一對兔子,那麼,由一對小兔子開始,12個月後會有多少對兔子呢?兔子繁殖的過程可以通過一棵「家族樹」來表示,如圖所示。
  • 淺談斐波那契數列-兔子數列-黃金分割數列
    在小學數學尋找數學規律題中,有一個非常神秘且有趣的數列,數列形式如下:1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987……,這個數學的規律就是它的第一項、第二項是1,從第三項開始每一項都等於它的前兩項之和。
  • 斐波那契數列與自然
    斐波那契數列與自然   斐波那契數列在自然界中的出現是如此地頻繁,人們深信這不是偶然的.   a)細察下列各種花,它們的花瓣的數目具有斐波那契數:延齡草、野玫瑰、南美血根草、大波斯菊、金鳳花、耬鬥菜、百合花、蝴蝶花.
  • 淺談斐波那契數列-兔子數列-黃金分割數列
    在小學數學尋找數學規律題中,有一個非常神秘且有趣的數列,數列形式如下:1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987……,這個數學的規律就是它的第一項、第二項是1,從第三項開始每一項都等於它的前兩項之和。
  • 黃金分割比——斐波那契數列
    斐波那契的《算經》,介紹了阿拉伯記數法和印度人對整數、分數、平方根、立方根的運算方法,在歐洲大陸產生了極大的影響,改變了當時數學的面貌,被認為是歐洲人寫的一部偉大的數學著作,在兩個多世紀中一直被奉為經典著作。
  • 斐波那契數列在自然界中如何表達
    1202年,義大利數學家李奧納多·皮薩諾(也被稱為斐波那契,意為「波那契之子」)思考了這樣一個問題:給定最優條件,一年裡一對兔子能生出多少對兔子?這個思想實驗告訴我們,母兔子總是生下一對,每一對都是一個雄性和一個雌性。兩隻剛出生的兔子被放在一個有柵欄的院子裡。兔子要到至少一個月大才能繁殖,所以第一個月只有一對。在第二個月底,雌性生下了兩隻兔子。
  • 交易玄學:斐波那契數列
    斐波那契數列。  斐波那契數列是什麼呢?  1202年,那時印刷術還沒有出現,斐波那契的書《算盤書》在義大利出版,受到當時羅馬君主的支持,而得以幸運地傳播開來。《算盤書》將阿拉伯世界的阿拉伯數字引進了當時的西方,其中一篇短文最為著名。
  • 斐波那契數列的四種實現
    ……斐波那契有四樣寫法,你知道麼?」我愈不耐煩了,努著嘴走遠。孔乙己剛在命令行打開 Vim,想在裡面寫代碼,見我毫不熱心,便又嘆一口氣,顯出極惋惜的樣子。(改編自 魯迅《孔乙己》)在家閒著也是閒著,不如我們來看看,如何寫一個輸出斐波那契數列的代碼吧。先說下,什麼是斐波那契數列?
  • 小學生也可以寫出的,複雜數列-斐波那契數列
    有一個數列與黃金分割比就有著不可名狀的關係,而且它的特性非常的多,關鍵這個數列還非常簡單,小學生都可以寫出來。今天我們就來著重講一下這個數列,斐波那契數列的4個特性。1. 數列前兩項之和等於第三項如果設F(n)為該數列的第n項(n∈N*),那麼這句話可以寫成如下形式::F(n)=F(n-1)+F(n-2)以上就是斐波那契數列的官方定義。
  • 斐波那契數列——自然界也有數學
    而對這些自然、社會以及生活中現象的解釋,最後往往都能歸結到斐波那契數列上來。斐波那契數列在數學理論中具有許多有趣的性質。這個性質在自然界中,不可思議之處在於,似乎完全沒有秩序的植物彼此相隔的距離或葉子的生長,都被斐波那契數列支持著。
  • 斐波那契數列:歐洲文藝復興時期的斐波那契和他的《算經》
    現傳《算經》是1228年的修訂版,其中還引進了著名的「斐波那契數列」本篇重點介紹「斐波那契數列」問題,節錄《算經》:23.3兔子問題一年內一對兔子可以繁衍多少對?某人有一對兔子,養殖在某地完全封的圍牆內,我們希望知道在一年內能繁衍到多少對?
  • LeetCode題解—斐波那契數列
    前言今天繼續算法題:斐波那契數列題目:斐波那契數列寫一個函數,輸入 n ,求斐波那契(Fibonacci)數列的第 n 項(即 F(N))。斐波那契數列的定義如下:F(0) = 0F(1) = 1 F(N) = F(N - 1) + F(N - 2)其中 N > 1.斐波那契數列由 0 和 1 開始,之後的斐波那契數就是由之前的兩數相加而得出
  • 斐波那契數列——隱藏在自然界的數學美
    即為「斐波那契數列(Fibonacci sequence)」1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233……斐波那契數列中的任一個數,都叫斐波那契數斐波那契數是大自然的一個基本模式只要我們認真觀察斐波那契數存在於自然界的萬物中