3.斐波那契數(shù)列的高效方法

斐波那契數(shù)列的遞歸方法眾所周知,但是遞歸也不是一個(gè)高效的解決方法。
從下邊的調(diào)用圖可以看出來(lái):



其中,對(duì)于1和2的計(jì)算重復(fù)了多次。
因此如果對(duì)數(shù)列中已經(jīng)計(jì)算過(guò)的數(shù)字進(jìn)行存儲(chǔ)這樣就可以只計(jì)算一次每個(gè)數(shù)值,達(dá)到高效的目的,計(jì)算時(shí)間也相對(duì)減少了。

1 known = {0:0,1:1}
2 
3 def fibonacci(n):
4     if n in known:
5         return known[n]
6 
7     res = fibonacci(n-1)+fibonacci(n-2)
8     known[n] = res
9     return res

代碼如上,把計(jì)算過(guò)的數(shù)值添加到一個(gè)字典里,就可以避免重復(fù)計(jì)算。
注:字典的值可以使用列表,但是鍵不可以。但是為了解決這個(gè)問(wèn)題,鍵是可以使用元組的,以后遇到再解釋。
另外,開(kāi)始我也有點(diǎn)疑慮,為什么known不是一個(gè)全局變量但是卻能在函數(shù)里邊修改和調(diào)用,后來(lái)知道了在python中可以修改的變量是不必再次聲明全局的。而如果是個(gè)元組或者是個(gè)單獨(dú)的str或者int變量想在函數(shù)這個(gè)局部里邊使用就需要聲明全局,否則就是重新構(gòu)造了一個(gè)變量,而不是對(duì)原先的進(jìn)行修改。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,834評(píng)論 18 399
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,323評(píng)論 25 708
  • 這段時(shí)間北京的天氣就像個(gè)更年期的大媽,又冷又霾,分分鐘凍成狗。加上連續(xù)幾天的無(wú)底線加班,身心俱疲。沒(méi)有力氣說(shuō)話,也...
    深海魚(yú)不吃魚(yú)閱讀 280評(píng)論 1 2
  • 此篇日志的時(shí)間是:2013年5月12日,今年是我來(lái)京的第三年,回憶過(guò)去,別是一番滋味。 首先,今天是個(gè)特殊的日子母...
    武陸柒閱讀 848評(píng)論 0 1
  • 你認(rèn)為自己是個(gè)美麗的人兒? 不如照照鏡子吧 看看你被粉底遮住的蒼白的臉 凌亂的頭發(fā) 浮夸的服裝 你認(rèn)為自己是個(gè)聰明...
    柏舟茶多酚閱讀 133評(píng)論 3 1

友情鏈接更多精彩內(nèi)容