- 趣味數學和Python編程
- 趙乘驥編著
- 808字
- 2022-07-29 14:34:59
5.1 斐波那契數列
列昂納多·斐波那契(Leonardo Fibonacci,1170—1250),意大利數學家,他在研究兔子繁殖問題時,發現了斐波那契數列。一般而言,兔子在出生兩個月后就有繁殖能力,一對兔子每個月能生出一對小兔子。如果所有兔子都不死,那么一年以后可以繁殖多少對兔子?
我們不妨從一對新出生的小兔子開始分析一下:
第一月,兔子剛出生,只有一對兔子;
第二月,小兔子還沒有繁殖能力,所以還是一對;
第三月,生下一對小兔,共有兩對兔子;
第四月,老兔子又生下一對,因為小兔子還沒有繁殖能力,所以一共是三對。這樣繼續畫下去我們可以得到圖5-1。

圖5-1 兔子繁殖示意圖
我們把月份、成年兔子對數和幼仔對數放入一張表,依此類推可以列出表5-1。
表5-1 兔子繁殖表

幼仔對數=前月成兔對數
成兔對數=前月成兔對數+前月幼仔對數
總體對數=本月成兔對數+本月幼仔對數
可以看出幼仔對數、成兔對數、總體對數都構成了一個數列。這個數列有個十分明顯的特點:前面相鄰兩項之和構成了后一項。這樣我們把兔子對數寫下來構成斐波那契數列:
1,1,2,3,5,8,13,21,34,55,89,144,…
如果設an為該數列的第n項(n∈N*),那么相鄰項的關系可以寫成如下形式:
an=an-1+an-2
此時,
a1=1,a2=1 an=an-1+an-2?。?i>n≥3,n∈N*)
有了這個公式,我們用程序來產生斐波那契數列的前100項,并把它存在一張表里面,程序如下:

這個程序里面使用了列表這種數據結構,列表是Python中一個重要的數據對象,可以把它看成一個一排編了號的抽屜,抽屜中能存放任何能放得下的東西,可以通過編號訪問,可以排序,可以增加。表5-2列出了常用的操作中列表的方法,表中假設已經定義了一個列表L。
表5-2 常用的列表操作方法

人們發現,當n趨向于無窮大時,前一項與后一項的比值越來越逼近黃金分割0.618,我們可以試著計算一下:
1÷1=1,
1÷2=0.5,
2÷3=0.666…,
3÷5=0.6,
5÷8=0.625,
……
55÷89=0.617 977…,
144÷233=0.618 025…,
……
46 368÷75 025=0.618 033 988 6…,
……
可以看到,從第11個數開始,已經與黃金分割比的前三位小數一致了。仍然用前面的小程序來核算一下:
