欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

如何使用Python實現斐波那契數列

系統 2027 0

斐波那契數列(Fibonacci)最早由印度數學家Gopala提出,而第一個真正研究斐波那契數列的是意大利數學家 Leonardo Fibonacci,斐波那契數列的定義很簡單,用數學函數可表示為:

如何使用Python實現斐波那契數列_第1張圖片

數列從0和1開始,之后的數由前兩個數相加而得出,例如斐波那契數列的前10個數是:0, 1, 1, 2, 3, 5, 8, 13, 21, 34。

用 Python 實現斐波那契數列常見的寫法有三種,各算法的執行效率也有很大差別,在面試中也會偶爾會被問到,通常面試的時候不是讓你簡單的用遞歸寫寫就完了,還會問你時間復雜度怎樣,空間復雜度怎樣,有沒有可改進的地方。

遞歸法

所謂遞歸就是指函數的定義中使用了函數自身的方法

            
def fib_recur(n):
assert n >= 0
if n in (0, 1):
return n
return fib_recur(n - 1) + fib_recur(n - 2)
for i in range(20):
print(fib_recur(i), end=" ")
>>> 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 
          

遞歸是一種代碼最簡潔的方法,但它是效率非常低,因為會出現大量的重復計算,時間復雜度是:O(1.618 ^ n),1.618是黃金分割。同時受限于 Python 中遞歸的最大深度是 1000,所以用遞歸來求解并不是一種可取的辦法。

遞推法

遞推法就是從0和1開始,前兩項相加逐個求出第3、第4個數,直到求出第n個數的值

            
def fib_loop(n):
a, b = 0, 1
for i in range(n):
a, b = b, a + b
return a
for i in range(20):
print(fib_loop(i), end=" ")
>>> 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 
          

這種算法的時間復雜是O(n),呈線性增長,如果數據量巨大,速度越到后面會越慢。

上面兩種方式都是使用分而治之的思想,就是把一個大的問題化小,然后利用小問題的求解得到目標問題的答案。

矩陣法

《線性代數》是大學計算機專業低年級的課程,這門課教的就是矩陣,那時候覺得這東西學起來很枯燥,沒什么用處,工作后你才發現搞機器學習、數據分析、數據建模時大有用處,書到用時方恨少。其實矩陣的本質就是線性方程式。

斐波那契數列中兩個相鄰的項分別為:F(n) 和 F(n - 1),如果把這兩個數當作一個2行1列的矩陣可表示為:

因為 F(n) = F(n-1)+F(n-2),所以就有:

通過反推,其實它是兩個矩陣的乘積得來的

依此類推:

最后可推出:

因此想要求出F(n)的值,只要能求出右邊矩陣的n-1次方的值,最后求得兩矩陣乘積,取新矩陣的第一行的第一列的值即可,比如n=3時,

?可以得知F(3)的值2,F(2)的值為1,因為冪運算可以使用二分加速,所以矩陣法的時間復雜度為 O(log n)

我們可以用科學計算包 numpy 來實現矩陣法:

            
import numpy
def fib_matr(n):
return (numpy.matrix([[1, 1], [1, 0]]) ** (n - 1) * numpy.matrix([[1], [0]]))[0, 0]
for i in range(20):
print(int(fib_matr(i)), end=" ")
>>> 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 
          

3中不同的算法效率對比:

如何使用Python實現斐波那契數列_第2張圖片

從上面圖可以看出遞歸法效率驚人的低,矩陣法在數據量比較大的時候才突顯出它的優勢,遞推法隨著數據的變大,所花的時間也越來越大。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产成人精品日本亚洲麻豆 | 91短视频社区在线观看 | 国产一区精品 | 欧美精品国产一区二区三区 | 欧美精品成人免费视频 | 逼逼网| 天堂一区二区三区 | 色婷婷精品国产一区二区三区 | 三a级片 | 国产正在播放 | 欧美一区在线观看视频 | 久久精品国产一区 | 日本一区二区免费看 | 天天干天天操天天碰 | 中文字幕欧美在线 | 国产精品久久久久久久午夜 | 亚洲一区二区三区福利在线 | 国产在线精品一区二区高清不卡 | 久久久久无码国产精品一区 | 四虎影视最新网站在线播放 | 91久久综合九色综合欧美亚洲 | 天天影视插插 | 国产精品第三页在线看 | 欧美在线一级精品 | 免费国产小视频在线观看 | 99热这里有免费国产精品 | 国产成人精品视频免费 | 91短视频社区在线观看 | 全黄裸片武则天一级第4季 亚洲一区国产 | 新婚人妻不戴套国产精品 | 国产成人网 | 亚洲综合精品成人 | 水中色av综合 | 国产又黄又猛又粗又爽的A片动漫 | 日本一区二区免费看 | 美女超碰 | 三级网站免费 | 亚洲网站色 | 午夜精品久久久久久久男人的天堂 | 国产成人福利视频在线观看 | 91精品观看91久久久久久国产 |