在 Python 中實現斐波那契數列

已發表: 2023-02-23

Python 是一種功能強大且用途廣泛的多用途編程語言,可促進人工神經網絡的實施,並支持自然語言處理、深度學習、面部識別、遺傳算法以及更多此類最先進的基於 AI 的任務。

本文探討了 Python 可用於準確生成斐波那契數列的一些主要方法——這是相對簡單算法的一個很好的例子,這些算法不僅本身有用,而且通常是構建能夠進行複雜計算的高級程序的基礎認知功能。

目錄

什麼是斐波那契數列?

斐波那契數列可能是人類已知的最簡單、已知最早和最著名的數學數列之一。

它是一個連續的整數序列,其中每個連續的數字等於其前兩個數字的總和斐波那契數列從 0 和 1 開始,並按如下方式進行:0、1、1、2、3、5、8、13 、21、34、55、89、144、233、377、610、987、1597、2584、4181、6765、10946、17711、28657、46368等。

以零為起點,斐波那契數列以雙向方式無限延伸如下:
…610, -377, 233, -144, 89, -55, 34, -21, 13, -8, 5, -3, 2, -1, 1, 0 , 1, 1, 2, 3, 5 , 8, 13, 21, 34, 55, 89, 144, 233, 377, 610……零左邊的序列被稱為“負斐波那契”序列。

查看我們的免費技術課程,在競爭中脫穎而出。

斐波那契數列在數學上可以表示如下:

n 0 1個2個3個4個5個6個7 8個9 10 11 12 13 14 15
xn _ 0 1個1個2個3個5個8個13 21 34 55 89 144 233 377 610

其中 n 是項數,x n是項值。 計算項值 x n 的公式為:
x n = x n-1 + x n-2

因此,例如,第 8 項的值是:

x 8 = x 7 + x 6

x 8 = 13 + 8

× 8 = 21

這裡有一些與斐波那契數列相關的瑣事:斐波那契日是在 11 月 23 日,因為該日期可能由數字 1、1、2 和 3 表示——它們代表斐波那契數列中正確排序的部分。

探索我們的熱門軟件工程課程

LJMU & IIITB 計算機科學碩士 加州理工學院 CTME 網絡安全證書課程
全棧開發訓練營 區塊鏈PG項目
全棧開發中的執行 PG 計劃
在下面查看我們所有的課程
軟件工程課程

斐波那契數列的歷史和起源

Leonardo Pisano Bogollo,俗稱斐波那契,在意大利口語中大致翻譯為“博納奇之子”。

斐波那契因制定了這個特殊的數字序列而受到讚譽,因此以他的名字命名。 公元 13 世紀初,他通過具有里程碑意義的著作《算盤算盤》將其介紹到西歐的大部分地區

斐波那契被廣泛認為是他那個時代最有才華的數學家之一,順便說一下,他還因印度-阿拉伯數字在整個歐洲的廣泛採用而受到讚譽,而在此之前,歐洲一直在使用更為笨重的羅馬數字。

然而,如今已知的斐波那契數列早在公元前 3 世紀就已在古印度使用。

它在 Pingala-sutras(一部古老的梵文韻律論著)和 Natya Shastra(一部關於古代印度表演藝術的論著)中都有表達,分別歸功於古印度受人尊敬的聖人 Acharya Pingala 和 Bharata Muni。

對這一序列最權威的評論出現在公元 8 世紀初維拉漢卡 (Virahanka) 的著作中。 雖然這段文字本身並沒有被追查到,但在公元 1135 年戈帕拉的作品中被引用並被廣泛引用。 巧合的是,那一年的數字代表了一個連續的斐波那契數列。

另一位研究韻律節奏的印度學者 Acharya Hemachandra 被認為對音序非常了解,他在公元 1150 年對此進行了詳細描述。 這比斐波那契的工作早了 50 多年。

查看 upGrad 的軟件開發課程

比奈公式

與所有具有常數係數的常數遞歸序列一樣,斐波那契數列可以表示為一個封閉形式的表達式,後來被稱為比奈公式。 以 19 世紀初法國著名數學家 Jacques Philippe Marie Binet 的名字命名的 Binet 公式可以表示如下:

鑑於 F n是第 n 個斐波那契數:

從上面的公式可以得出這樣一個事實,除了前幾個數字,斐波那契數列中每對連續數字之間的比率逐漸收斂於所謂的黃金比例——1:1.618,用第 21 位表示希臘字母表中的字母 – Φ (phi)。

這意味著系列中的每個數字都是它後面的斐波那契數的 0.6180339887,或者每個連續的數字都是斐波那契數列中它前面的數字的 1.6180339887 倍。

需求軟件開發技能

JavaScript 課程 核心 Java 課程 數據結構課程
Node.js 課程 課程 全棧開發課程
NFT課程 開發運營課程 大數據課程
React.js 課程 網絡安全課程 雲計算課程
數據庫設計課程 Python 課程 加密貨幣課程

斐波那契數列和黃金比例

斐波那契數列及其衍生物黃金比例的重要性因其在自然界中異常頻繁的出現而得到顯著提高。 一些最常見的例子包括:

  • 一朵花的花瓣數幾乎總是斐波那契數,無論是 3 瓣百合、5 瓣毛茛、21 瓣菊苣花還是 34 瓣雛菊。
    有趣的是,這種與斐波那契數列的堅定一致性似乎是達爾文設計的產物,因為科學家們發現,這些特殊的花瓣排列確保每一朵花都能最佳地暴露在陽光、水分和授粉媒介(如鳥類和昆蟲)下.
  • 幾乎所有自然發生的螺旋圖案中都可以看到黃金比例或 Φ——從向日葵的種子頭到整個星系,從松果上的突起到颶風,從菠蘿上的刺到山羊角的曲率,以及小花從花椰菜到人類指紋上的螺紋。
    鸚鵡螺殼的螺旋圖案被認為是所謂的“斐波那契螺旋線”的特別標誌性表現。
  • 樹木和根系的分枝、蜂箱中雄蜂和雌蜂的比例、動物身體的各個部位——從微生物到蝸牛、從海龜到鯨魚,都符合黃金比例。
  • 人體生理學的各個方面——例如我們的整體長度與從頭部到指尖的距離之間的比例,或者我們的前臂與手的長度之間的比例,都是根據 Φ 設計的。
    人耳中的耳蝸是斐波那契螺旋線,臍帶也是如此。 甚至有人認為,我們會下意識地被高寬比例接近黃金比例的面孔所吸引。

從本質上講,數學是一種探索萬物規律的探索。 沒有比在大自然中尋找這些模式更好或更普遍的舞台了。

從微生物到星系,斐波那契數列反映了從微觀到宇宙規模的大量自然生理學和現象——而且有充分的理由。

黃金比例或 Φ 賦予它所表達的一切美學和功能和諧的人體工程學平衡。正是由於這個原因,黃金比例也被稱為神聖比例。

但斐波那契數列的意義遠遠超出了自然界,它在廣泛的人類活動中得到體現——跨越數學、科學和藝術。

閱讀我們與軟件開發相關的熱門文章

如何在 Java 中實現數據抽象? Java中的內部類是什麼? Java 標識符:定義、語法和示例
通過示例了解 OOPS 中的封裝 C 中的命令行參數解釋 2022 年雲計算的十大特點
Java 中的多態性:概念、類型、特徵和示例 Java 中的包以及如何使用它們? Git 初學者教程:從零開始學習 Git

使用 Python 生成斐波那契數列

斐波那契數列和黃金比例是不可或缺的各個方面:

  • 代數、幾何、統計學和三角學——可應用於各種經濟實踐和股票市場分析。
  • 生物學、物理學和計算機科學——在合成生物學和遺傳學、土木和機械工程、建築、室內設計,當然還有計算機編程中都有應用。
  • 藝術和平面設計以及詩歌、音樂和舞蹈

它通常是創建與上述主題及其他主題相關的各種有用應用程序的基本步驟。

斐波那契數列可以使用多種編程語言生成。 如前所述,Python 是其中最強大和最通用的之一——能夠以多種方式使用和操縱斐波那契數列和斐波那契數列,以開發一些最前沿的技術解決方案。

從 IIIT Bangalore 查看 upGrad 的區塊鏈高級證書程序員

以下是一些可以使用 Python 生成斐波那契數列的方法:

迭代方法

在這種方法中,算法

  • 分配任意兩個變量來表示序列中的前兩個連續項。 其中 0 代表序列的第一項,1 代表第二項。
  • 設置要在序列中計算的所需項範圍,並從 0 向上循環。
  • 在每次迭代中,算法:
    • 添加兩個變量。
    • 然後將第二個變量的值賦給第一個變量
      和前兩個變量的總和到第二個變量。
    • 等等…

對應的代碼會這樣寫

def fibo (num) :

一 = 0

b = 1

對於 xrange(0, 20) 中的 i:

打印一個

a, b = b, a + b

相應的輸出將是斐波那契數列的前二十個數字

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89,
144, 233, 377, 610, 987, 1597, 2584, 4181

遞歸方法

在這種方法中,算法推導出

每個連續項的值通過將前兩個項的值相加得到。 這可以表示為項 n = 項 n-1 + 項 n-2。

此規則的唯一兩個例外是當項的值為 0 和 1 時,兩者都返回未更改的值。 這些異常可以表示為 term n = term n。

對應的代碼會這樣寫

def recur_fodo (n):

如果 n < = 1:

返回 n

別的:

返回 (recur_fibo (n-1) + recur_fibo (n-2) )

N 項 = 20

# 檢查術語數是否有效

如果書呆子 <= 0:

打印(“請輸入一個正整數”)

別的:

打印(“斐波那契數列”)

對於範圍內的 i (nterms):

打印 (recur_fibo i))

相應的輸出將是斐波那契數列的前二十個數字

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89,
144, 233, 377, 610, 987, 1597, 2584, 4181

斐波那契數列的一些獨立應用

除了作為開發各種複雜模型和應用程序的基礎步驟之外,斐波那契數列本身還具有一些獨特的特徵,這些特徵使它們在執行某些任務時具有無可估量的價值:

  • 考慮到一對連續的斐波那契數通常對該算法構成最嚴峻的挑戰,斐波那契數可用於分析歐幾里德算法的計算運行時間,以確定一對隨機整數的最大公約數。
  • 斐波那契數列唯一地表示一個完整的數列,該數列中的每個正整數都是兩個斐波那契數列之和,其中任何一個都只能使用一次。
  • 基於斐波那契數列的算法幫助開發了斐波那契搜索技術、斐波那契堆數據結構和用於互連並行和分佈式系統的斐波那契立方圖。
  • 斐波那契數列用於 scrum 撲克——一種基於共識的遊戲化技術,用於估計軟件開發中的開發目標。
  • 斐波那契水平的回撤通常用於股票市場交易的技術分析。

綜上所述

在本文中,我們試圖激發您對斐波那契數列或黃金比例的興趣——它的主要特徵及其在自然界中驚人的頻繁出現——無論是有生命的還是無生命的。

我們試圖捕捉影響並重現這種數學現像在人類追求的廣泛不同和多維範圍內創造的奇蹟——藝術和科學、工程和技術、解剖學和遺傳學、經濟學和金融……等等.

我們試圖讓一種叫做 Python 的極其通用的編程語言如何幫助您操縱這些數學概念,以意想不到的多種方式直接和間接地造福人類。

我們熱切希望 Python 和斐波那契數列的這種強大組合已經並將繼續激發您的想像力,點燃您的思想,激發您的抱負並激發您取得最大的成就。 編碼愉快! 做夢快樂!

在 upGrad,我們了解實踐、動手學習的重要性——尤其是在軟件開發方面。 因此,我們的課程和培訓計劃以實用性為核心。 其中一項舉措是全棧開發訓練營,它將幫助您培養在全棧開發中脫穎而出所需的所有相關技能。

想要分享這篇文章?

立即規劃您的軟件開發生涯!

申請計算機科學理學碩士