一、什么是Fibonacci數列?
斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖為例子而引入,故又稱為“兔子數列”,指的是這樣一個數列:1、1、2、3、5、8、13、21、34、……在數學上,斐波那契數列以如下被以遞推的方法定義:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)
由定義可知,這個數列從第3項開始,每一項都等於前兩項之和。
參考資料 斐波那契數列_百度百科
二、給出Fibonacci數列的遞歸表達式。
def fib(n):
return 1 and n <= 2 or fib(n - 1) +fib(n - 2)
print('\n the answer is %d'%(fib(10)))
三、用python或scratch遞歸實現Fib(n),並進行測試,在你的計算機上1分鍾內能計算出fib(10),fib(100),fib(1000),fib(10000)嗎?
1.fib(10)

用時0.057秒
2.fib(100)

如圖,在等候了三分多鍾依舊無果后,我手動停止了它的運行(因為風扇聲實在太大了,跑不動啊!)
3.fib(1000)及fib(10000)
沒有嘗試,但根據fib(100)的情況來看,應該也跑不動。
四、反擊篇!
在參考了下方網站后:
python 入門之斐波那契數列遞歸表達式算法和非遞歸算法
此時我發現該網站中所給的非遞歸算法解決fib(n)的問題很快
而且明白了原因,其原因是:
- 1.遞歸算法時間復雜度為:O(2^N)----太耗時間
- 2.非遞歸算法時間和空間復雜度都為:O(N)
運行非遞歸代碼計算fib(100)、fib(1000)及fib(10000)
fib(100)

fib(1000)

fib(10000)

