最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用Python實(shí)現(xiàn)斐波那契數(shù)列的5種方法全解析

 更新時(shí)間:2026年03月02日 09:57:05   作者:大河大河o  
文章介紹了五種實(shí)現(xiàn)斐波那契數(shù)列的方法,包括循環(huán)迭代、樸素遞歸、記憶化遞歸、生成器和矩陣快速冪,每種方法都有其優(yōu)缺點(diǎn)和適用場(chǎng)景,需要的朋友可以參考下

引言:為什么斐波那契是編程“入門(mén)必修課”?

斐波那契數(shù)列(Fibonacci Sequence)是一個(gè)經(jīng)典的數(shù)學(xué)序列:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
定義為:F(0) = 0, F(1) = 1, F(n) = F(n-1) + F(n-2)

它不僅是數(shù)學(xué)之美,更是編程思維的試金石。
掌握它的多種實(shí)現(xiàn)方式,意味著你真正理解了:

  • 循環(huán)與遞歸
  • 時(shí)間復(fù)雜度與空間復(fù)雜度
  • 記憶化與動(dòng)態(tài)規(guī)劃
  • 生成器與內(nèi)存優(yōu)化

方法一:【最優(yōu)】循環(huán)迭代法(推薦級(jí))

這是最實(shí)用、最高效的寫(xiě)法,也是你寫(xiě)的版本!

def fib_iter(n):
    a, b = 0, 1
    for _ in range(n):
        a, b = b, a + b
    return a

優(yōu)點(diǎn):

  • 時(shí)間復(fù)雜度:O(n)
  • 空間復(fù)雜度:O(1)
  • 代碼簡(jiǎn)潔,邏輯清晰
  • 支持大數(shù)計(jì)算(如 fib_iter(10000) 不會(huì)爆棧)

使用建議:

  • 日常使用首選!
  • 適用于絕大多數(shù)場(chǎng)景,尤其是 n 較大時(shí)

方法二:【不推薦】樸素遞歸法(反面教材)

def fib_recursive(n):
    if n <= 1:
        return n
    return fib_recursive(n - 1) + fib_recursive(n - 2)

問(wèn)題:

  • 時(shí)間復(fù)雜度:O(2^n) —— 指數(shù)級(jí)增長(zhǎng),效率極低
  • 空間復(fù)雜度:O(n) —— 遞歸深度
  • 存在大量重復(fù)計(jì)算(如 fib_recursive(5) 會(huì)重復(fù)計(jì)算 fib_recursive(3) 兩次)

結(jié)果:

  • n > 30 就明顯卡頓
  • 僅用于理解遞歸思想,不要在生產(chǎn)環(huán)境使用

方法三:【推薦】記憶化遞歸(動(dòng)態(tài)規(guī)劃思想)

from functools import lru_cache
 
@lru_cache(maxsize=None)
def fib_memo(n):
    if n <= 1:
        return n
    return fib_memo(n - 1) + fib_memo(n - 2)

優(yōu)點(diǎn):

  • 時(shí)間復(fù)雜度:O(n)
  • 空間復(fù)雜度:O(n)
  • 利用緩存避免重復(fù)計(jì)算
  • 代碼接近數(shù)學(xué)定義,可讀性強(qiáng)

適用場(chǎng)景:

  • 學(xué)習(xí)“記憶化”、“動(dòng)態(tài)規(guī)劃”的絕佳案例
  • 適合中等規(guī)模數(shù)據(jù)(如 n < 10?)

方法四:【推薦】生成器版本(內(nèi)存友好)

def fib_generator(n):
    a, b = 0, 1
    count = 0
    while count < n:
        yield a
        a, b = b, a + b
        count += 1
 
# 使用方式
for num in fib_generator(10):
    print(num, end=' ')
# 輸出:0 1 1 2 3 5 8 13 21 34

優(yōu)點(diǎn):

  • 不一次性生成所有數(shù),節(jié)省內(nèi)存
  • 支持 next() 逐個(gè)獲取
  • 適合處理大數(shù)據(jù)或無(wú)限序列

適用場(chǎng)景:

  • 處理大量數(shù)據(jù)(如前 100 萬(wàn)個(gè)斐波那契數(shù))
  • 流式處理、實(shí)時(shí)輸出

方法五:【高級(jí)】矩陣快速冪(超快!)

適用于:求第百萬(wàn)個(gè)斐波那契數(shù) 的極致性能需求。

def matrix_multiply(A, B):
    return [
        [A[0][0]*B[0][0] + A[0][1]*B[1][0], A[0][0]*B[0][1] + A[0][1]*B[1][1]],
        [A[1][0]*B[0][0] + A[1][1]*B[1][0], A[1][0]*B[0][1] + A[1][1]*B[1][1]]
    ]
 
def matrix_power(mat, n):
    if n == 1:
        return mat
    if n % 2 == 0:
        half = matrix_power(mat, n // 2)
        return matrix_multiply(half, half)
    else:
        return matrix_multiply(mat, matrix_power(mat, n - 1))
 
def fib_fast(n):
    if n <= 1:
        return n
    base_matrix = [[1, 1], [1, 0]]
    result_matrix = matrix_power(base_matrix, n)
    return result_matrix[0][1]

優(yōu)點(diǎn):

  • 時(shí)間復(fù)雜度:O(log n)
  • 極速計(jì)算,適合超大數(shù)

適用場(chǎng)景:

  • 求第 10? 個(gè)斐波那契數(shù)
  • 算法競(jìng)賽、高性能計(jì)算

性能對(duì)比總結(jié)表

方法時(shí)間復(fù)雜度空間復(fù)雜度是否推薦適用場(chǎng)景
循環(huán)迭代O(n)O(1)??? 強(qiáng)烈推薦大多數(shù)情況
樸素遞歸O(2?)O(n)? 不推薦教學(xué)演示
記憶化遞歸O(n)O(n)? 推薦學(xué)習(xí)動(dòng)態(tài)規(guī)劃
生成器O(n)O(1)? 推薦大數(shù)據(jù)/流式處理
矩陣快速冪O(log n)O(log n)? 高級(jí)使用超大數(shù)計(jì)算

最佳實(shí)踐建議

  • 日常開(kāi)發(fā) → 用循環(huán)迭代法(你寫(xiě)的那個(gè))
  • 學(xué)習(xí)算法 → 用記憶化遞歸
  • 處理大數(shù)據(jù) → 用生成器
  • 追求極致性能 → 用矩陣快速冪

擴(kuò)展練習(xí)題(挑戰(zhàn)一下)

  1. 寫(xiě)一個(gè)函數(shù),返回前 n 個(gè)斐波那契數(shù)的列表(用生成器)
  2. 寫(xiě)一個(gè)函數(shù),判斷某個(gè)數(shù)是否為斐波那契數(shù)
  3. 畫(huà)出斐波那契數(shù)列的圖形(用 matplotlib)
  4. 模擬“兔子繁殖”問(wèn)題(經(jīng)典故事背景)

附錄:一鍵運(yùn)行腳本模板

"""
【推薦】斐波那契函數(shù)合集(可直接復(fù)制使用)
"""
from functools import lru_cache
 
# 1. 循環(huán)迭代(最優(yōu))
def fib_iter(n):
    a, b = 0, 1
    for _ in range(n):
        a, b = b, a + b
    return a
 
# 2. 記憶化遞歸(推薦學(xué)習(xí))
@lru_cache(maxsize=None)
def fib_memo(n):
    if n <= 1:
        return n
    return fib_memo(n - 1) + fib_memo(n - 2)
 
# 3. 生成器(內(nèi)存友好)
def fib_gen(n):
    a, b = 0, 1
    for _ in range(n):
        yield a
        a, b = b, a + b
 
# 測(cè)試
if __name__ == "__main__":
    print("前10個(gè)斐波那契數(shù):")
    print(list(fib_gen(10)))

以上就是利用Python實(shí)現(xiàn)斐波那契數(shù)列的5種方法全解析的詳細(xì)內(nèi)容,更多關(guān)于Python實(shí)現(xiàn)斐波那契數(shù)列的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • pytest官方文檔解讀fixtures

    pytest官方文檔解讀fixtures

    這篇文章主要介紹了pytest官方文檔解讀fixtures,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 分享PyCharm的幾個(gè)使用技巧

    分享PyCharm的幾個(gè)使用技巧

    這篇文章主要介紹了分享PyCharm的幾個(gè)使用技巧,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • python+tkinter可視化GUI方式

    python+tkinter可視化GUI方式

    文章介紹了使用Python的tkinter庫(kù)創(chuàng)建GUI窗口的過(guò)程,包括窗口和標(biāo)簽的定義、Entry和Text控件的基本屬性和使用方法、網(wǎng)格布局的應(yīng)用、按鈕綁定事件和彈窗的使用、Combox下拉框的添加、控件屬性值的獲取和更改,以及tkinter自帶的剪切板操作
    2026-04-04
  • Python腳本實(shí)現(xiàn)依賴漏洞自動(dòng)掃描工具

    Python腳本實(shí)現(xiàn)依賴漏洞自動(dòng)掃描工具

    這篇文章主要為大家詳細(xì)介紹了如何通過(guò)Python腳本實(shí)現(xiàn)一個(gè)依賴漏洞自動(dòng)掃描工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2026-03-03
  • python plt可視化——打印特殊符號(hào)和制作圖例代碼

    python plt可視化——打印特殊符號(hào)和制作圖例代碼

    這篇文章主要介紹了python plt可視化——打印特殊符號(hào)和制作圖例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • Python 存儲(chǔ)字符串時(shí)節(jié)省空間的方法

    Python 存儲(chǔ)字符串時(shí)節(jié)省空間的方法

    這篇文章主要介紹了Python 存儲(chǔ)字符串時(shí)節(jié)省空間的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • Python之@cache裝飾器的使用及說(shuō)明

    Python之@cache裝飾器的使用及說(shuō)明

    @cache是Python3.9引入的新裝飾器,用于緩存函數(shù)結(jié)果,避免重復(fù)計(jì)算,提高性能,它基于functools.lru_cache實(shí)現(xiàn),支持無(wú)限大小緩存,適用于純函數(shù),使用示例包括遞歸斐波那契數(shù)列和模擬耗時(shí)計(jì)算,注意適用場(chǎng)景、參數(shù)限制和內(nèi)存占用,與@lru_cache相比,@cache更簡(jiǎn)潔,但功能單一
    2025-12-12
  • 使用pyplot.matshow()函數(shù)添加繪圖標(biāo)題

    使用pyplot.matshow()函數(shù)添加繪圖標(biāo)題

    這篇文章主要介紹了使用pyplot.matshow()函數(shù)添加繪圖標(biāo)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • 一文詳解如何在Python中使用Requests庫(kù)

    一文詳解如何在Python中使用Requests庫(kù)

    這篇文章主要介紹了如何在Python中使用Requests庫(kù)的相關(guān)資料,Requests庫(kù)是Python中常用的第三方庫(kù),用于簡(jiǎn)化HTTP請(qǐng)求的發(fā)送和響應(yīng)處理,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-02-02
  • Python標(biāo)準(zhǔn)庫(kù)之os模塊詳解

    Python標(biāo)準(zhǔn)庫(kù)之os模塊詳解

    Python的os模塊是用于與操作系統(tǒng)進(jìn)行交互的模塊,它提供了許多函數(shù)和方法來(lái)執(zhí)行文件和目錄操作、進(jìn)程管理、環(huán)境變量訪問(wèn)等,本文詳細(xì)介紹了Python標(biāo)準(zhǔn)庫(kù)中os模塊,感興趣的同學(xué)跟著小編一起來(lái)看看吧
    2023-08-08

最新評(píng)論

曲靖市| 恩施市| 贡嘎县| 拜城县| 长沙市| 永福县| 龙门县| 新巴尔虎右旗| 苗栗县| 平和县| 遵义县| 深水埗区| 临安市| 遂平县| 衡东县| 芒康县| 西青区| 巴林右旗| 龙海市| 武义县| 祁门县| 界首市| 庆城县| 新龙县| 光山县| 虎林市| 三河市| 南溪县| 天长市| 徐闻县| 新昌县| 平果县| 澳门| 额济纳旗| 灵丘县| 晋宁县| 合阳县| 黑山县| 上杭县| 通城县| 陈巴尔虎旗|