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

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

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

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

斐波那契數(shù)列(Fibonacci Sequence)是一個經(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é)之美,更是編程思維的試金石。
掌握它的多種實現(xiàn)方式,意味著你真正理解了:

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

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

這是最實用、最高效的寫法,也是你寫的版本!

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

優(yōu)點:

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

使用建議:

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

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

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

問題:

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

結(jié)果:

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

方法三:【推薦】記憶化遞歸(動態(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)點:

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

適用場景:

  • 學(xué)習(xí)“記憶化”、“動態(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)點:

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

適用場景:

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

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

適用于:求第百萬個斐波那契數(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)點:

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

適用場景:

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

性能對比總結(jié)表

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

最佳實踐建議

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

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

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

附錄:一鍵運行腳本模板

"""
【推薦】斐波那契函數(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
 
# 測試
if __name__ == "__main__":
    print("前10個斐波那契數(shù):")
    print(list(fib_gen(10)))

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

相關(guān)文章

  • pytest官方文檔解讀fixtures

    pytest官方文檔解讀fixtures

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

    分享PyCharm的幾個使用技巧

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

    python+tkinter可視化GUI方式

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

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

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

    python plt可視化——打印特殊符號和制作圖例代碼

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

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

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

    Python之@cache裝飾器的使用及說明

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

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

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

    一文詳解如何在Python中使用Requests庫

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

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

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

最新評論

呼伦贝尔市| 普安县| 高清| 富川| 湄潭县| 昌黎县| 双城市| 武宣县| 府谷县| 滁州市| 长兴县| 碌曲县| 聂荣县| 泰宁县| 同德县| 雅江县| 万载县| 白城市| 吉木乃县| 龙井市| 托里县| 嘉黎县| 安远县| 西乌| 靖远县| 略阳县| 融水| 绥棱县| 扎兰屯市| 游戏| 胶州市| 新安县| 萨嘎县| 阜城县| 松溪县| 乌什县| 南澳县| 苏州市| 大荔县| 遂溪县| 大港区|