python實現連續數列相加_技術 | Python經典面試題解析實現斐波那契數列

8daee5ed0b060717abb70151fad0f096.png

黑馬程序員

微信號:heiniu526

傳智播客旗下互聯網資訊,學習資源免費分享平臺

大家在面試過程中經常會考到斐波那契數列,斐波那契數列(Fibonacci)最早由印度數學家Gopala提出,而第一個真正研究斐波那契數列的是意大利數學家 Leonardo?Fibonacci,斐波那契數列的定義很簡單,用數學函數可表示為:

236dfb29026968e8638ec4006a7b84c8.png

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

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

1fcf05d2b62ba9d11a9aa2745bdf85bd.gif遞歸法

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

6cfcbddfaaf197ec865b971dc3f2b918.png

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

1fcf05d2b62ba9d11a9aa2745bdf85bd.gif遞推法

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

e0d632bdad398a9e9e5debe0892cf047.png

這種算法的時間復雜是O(n),呈線性增長,如果數據量巨大,速度越到后面會越慢。上面兩種方式都是使用分而治之的思想,就是把一個大的問題化小,然后利用小問題的求解得到目標問題的答案。

1fcf05d2b62ba9d11a9aa2745bdf85bd.gif矩陣法

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

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

72a2e56992db5a5db3f3b4a5562787ab.png

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

0bc714982d77d9509b62ded592b6e1f3.png

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

a767c1d7b6c1f7112618bb370772caae.png

依此類推:

e18c635a24ed29ae89439b939db09fc1.png

最后可推出:

18a2b27ba6e354563f138cef889d25f6.png

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

8b5aecf61f09d2a52965869443e958cc.png

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

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

6c35861e65ebcd277751c3063e7b2f2c.png

1fcf05d2b62ba9d11a9aa2745bdf85bd.gif總結

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

1103e5fca8860f6508b5147a1d705b2e.png

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

6aa543f46baeddf0286c6d908c832bcb.gif干貨不錯就點下在看f43aa1c4c7eb1193e56fbc2bc007d86d.gif

▼點擊?加程序員交流群

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/272979.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/272979.shtml
英文地址,請注明出處:http://en.pswp.cn/news/272979.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

廣西2021高考成績位次查詢,2020年廣西高考一分一段表及高考位次成績排名查詢(理科+文科)...

一、2020年廣西高考一分一段表查詢排名方法廣西招辦(考試院)會公布的省市高考每一分分數的考生數額統計表就是我們所說的——高考“一分一段表”,其顯示出每一分的分數值全省考生有多少名,就可以讓考生估算出自己的排名位次。2020年廣西高考一分一段表排…

PV公式

IP(獨立IP): 即Internet Protocol,指獨立IP數。00:00-24:00內相同IP地址之被計算一次。PV(訪問量): 即Page View, 即頁面瀏覽量或點擊量,用戶每次刷新即被計算一次。UV(獨立訪客):即Unique Visitor,訪問您網站的一臺電腦客戶端為…

csv文件 內容轉義_CSV文件如何同時轉義逗號和雙引號?

小編典典有幾個庫。這是兩個示例:阿帕奇共享郎包括一類特殊的逃避或UNESCAPE字符串(CSV,EcmaScript的,HTML,Java和JSON,XML)org.apache.commons.lang3.StringEscapeUtils 。轉義 為CSVString escaped StringEscapeUti…

臺式計算機單核與雙核,什么是單核cpu、雙核cpu 單核cpu和雙核cpu的區別是什么...

在買電腦的時候,我們經常會發愁,究竟是買單核cpu好,還是買雙核cpu比較好,尤其是面對售貨員把單核cpu電腦和雙核cpu電腦都可以夸的天花亂墜的時候,我們更糊涂了,究竟買哪種好呢?針對這種情況,小…

當用DJANGO的migrate不成功時。。。。

URL:http://my.oschina.net/u/862582/blog/355421 因為操作SQL數據庫時不規范,或是多人開發時產生了同步問題,就可能導致正規的MIGRATE時不能完成。 已其修改,不如直接生成SQL之后運行。。 記住語法即可。。。 python manage.py sqlmigrate a…

R語言seqm_R語言seq()函數用法

1、seq()用來生成一組數字的函數。Usage:## Default S3 method:seq(from 1, to 1, by ((to - from)/(length.out - 1)),length.out NULL, along.with NULL, ...)seq.int(from, to, by, length.out, along.with, ...)seq_along(along.with)seq_len(length.out)A…

美國計算機生物學要求,美國大學CS專業分支生物信息學和計算生物學專業 Bioinformatics and Computational Biology介紹...

美國留學申請美國大學計算機專業(CS)的學生非常多。美國大學CS專業的研究分支也非常 多,不同分支對學生的要求也會不同,因此,學生們要根據自己的條件選擇適合自己的研究方向。下面主要為大家介紹的是美國大學CS專業分支生物信息學和計算生物學…

Spark入門實戰系列--8.Spark MLlib(上)--機器學習及SparkMLlib簡介

【注】該系列文章以及使用到安裝包/測試數據 可以在《傾情大奉送--Spark入門實戰系列》獲取 1、機器學習概念 1.1 機器學習的定義 在維基百科上對機器學習提出以下幾種定義: l“機器學習是一門人工智能的科學,該領域的主要研究對象是人工智能&#xff0c…

cadz軸歸零命令_CAD圖形Z軸坐標歸零方法

AutoCAD2012 64位精簡版中文免安裝版軟件大小:561.5M授權方式:免費軟件立即下載CAD軟件怎樣將圖形坐標Z軸歸零?當我們遇到CAD圖形標高一致的時候,如果想要讓圖形統一標高,就需要先將圖形坐標Z軸歸零。本次小編為您整理了CAD軟件里…

net以execl做數據庫_[原創]Net實現Excel導入導出到數據庫(附源碼)

關于數據庫導出到Excel和SQLServer數據導出到Excel的例子,在博客園有很多的例子,自己根據網上搜集資料,自己做了亦歌簡單的demo,現在分享出來供初學者學習交流使用。一、數據庫導入導出到Excel,比較流行的有兩種方式&a…

計算機基礎cpu知識,CPU基礎知識: DIY裝機小白必看的CPU知識掃盲

CPU也就是中央處理器,全拼為Central Processing Unit,在計算機中可以比喻成人的大腦。它是一塊超大規模的集成電路,是一臺計算機的運算核心和控制核心。它的功能主要是解釋計算機指令以及處理計算機軟件中的數據。下面華強電子網的小編分享一…

const 用法

static NSString * const testString "google"; //表示testString這個指針不能被修改,如若對testString賦值則會報錯:testString = "hello";編譯器會報錯 static NSString const *testString "google"; //表…

mvc html validator,ASP.NET MVC實現Validation驗證器擴展

今天介紹在ASP.NET MVC實現Validation驗證器擴展,通過使用Controller驗證并不是最好的方法:驗證過于分散,容易造成重復代碼,不利于維護與擴展,因此本節將使用MVC默認綁定器(DefaultModelBinder)中包含了驗證架構,并實現Validation驗證器擴展&…

git 幾種還原版本_Git恢復之前版本的兩種方法reset、revert(圖文詳解)

一、問題描述在利用github實現多人合作程序開發的過程中,我們有時會出現錯誤提交的情況,此時我們希望能撤銷提交操作,讓程序回到提交前的樣子,本文總結了兩種解決方法:回退(reset)、反做(revert)。二、背景知識git的版…

自定義列表視圖

通過繼承BaseAdapter寫一個子類,可以創建自定義列表視圖: public class MyListAdapter extends BaseAdapter { private LayoutInflater mInflater;//聲明一個LayoutInflater類變量 private Context mContext;//聲明一個Context類變量 priva…

計算機專業答辯模板,論文答辯模板-計算機專業.ppt

《論文答辯模板-計算機專業.ppt》由會員分享,可在線閱讀,更多相關《論文答辯模板-計算機專業.ppt(9頁珍藏版)》請在裝配圖網上搜索。1、基于S2SH論壇系統的設計與實現,專業: 姓名: 學號: 指導教師:,(附)論文…

springmvc請求返回一個字符_SpringMVC系列之Web利器SpringMVC

課程簡介:課程目標:了解SpringMVC和Spring的關系,能夠使用SpringMVC框架開發自己的Web應用。整合Spring , SpringMVC , MyBatis搭建項目開發環境,理解三層架構和MVC模式適用人群:適合對Java基礎知識應用自如&#xff0…

一次完整較為滲透過程

步驟一: 利用阿D瀏覽器通過https://s.bt.gg 注入關鍵字掃描發現注入點: http://www.rqyl.gov.cn/*****.php?ID153 用啊D跑不出賬號密碼 步驟二: 手工注入http://www.rqyl.gov.cn/*****.php?ID153 and 11 、and12出錯 猜字段ht…

html5 filereader讀取文件,H5的FileReader分布讀取文件應該如何使用以及其方法簡介...

這次給大家帶來H5的FileReader分布讀取文件應該如何使用以及其方法簡介,H5的FileReader分布讀取文件的使用以及其方法簡介的注意事項有哪些,下面就是實戰案例,一起來看一下。先介紹一下H5中FileReader的一些方法以及事件FileReader方法名稱 作…

mysql 查詢某一主鍵在那些表中中被設置為外鍵了

use information_schema; show tables; select * from KEY_COLUMN_USAGE where COLUMN_NAMEareaid; 轉載于:https://www.cnblogs.com/liaojie970/p/4799750.html