Python小练习系列 Vol.2:斐波那契数列的三种实现方式(从低效到高效)
🧠 Python小练习系列 Vol.2:斐波那契数列的三种实现方式(从低效到高效)
👋 欢迎继续关注 Python 小练习!本期我们来聊聊最经典的算法之一——斐波那契数列,通过三种方式实现,深入体会效率的提升过程!
🧩 一、题目简介
斐波那契数列(Fibonacci Sequence)是一个非常经典的递推数列,其定义如下:
F(0) = 0,F(1) = 1,F(n) = F(n-1) + F(n-2)(n ≥ 2)
这个数列在数学、算法、面试题中都经常出现,我们将用三种方式来实现它,并对比它们的优缺点。
🧠 二、三种实现方式对比
实现方式 | 思路简介 | 时间复杂度 | 优缺点 |
---|---|---|---|
递归 | 直接按照数学定义写递归函数 | O(2^n) | 简洁但效率极低 |
迭代 | 从底向上用两个变量循环推导 | O(n) | 快速,推荐 |
记忆化递归 | 加缓存避免重复计算 | O(n) | 易读 + 高效,兼具递归风格 |
👨💻 三、Python代码实现
方式一:朴素递归(不推荐)
def fib_recursive(n):
if n <= 1:
return n
return fib_recursive(n-1) + fib_recursive(n-2)
📌 缺点:存在大量重复计算,效率指数级下降。
方式二:迭代法(推荐)
def fib_iterative(n):
a, b = 0, 1
for _ in range(n):
a, b = b, a + b
return a
✅ 优点:空间和时间效率都很好,最适合生产场景。
方式三:记忆化递归(递归 + 缓存)
def fib_memo(n, memo={}):
if n in memo:
return memo[n]
if n <= 1:
return n
memo[n] = fib_memo(n-1, memo) + fib_memo(n-2, memo)
return memo[n]
✅ 优点:保留递归思维的同时极大提升效率!
🔍 四、输出示例
print(fib_recursive(5)) # 输出 5
print(fib_iterative(5)) # 输出 5
print(fib_memo(5)) # 输出 5
💡 五、进阶思考
- 🔄 使用
functools.lru_cache
实现自动记忆化 - 🧵 用生成器生成无限斐波那契流(配合
yield
) - 🧮 如何用矩阵快速幂实现斐波那契?(面试常见)
❤️ 结语
递归虽优雅,但效率也是工程实践的生命线!
📌 下一期预告:生成有效括号组合(回溯 + DFS)
👉 点个赞 👍 + 收藏 🌟,持续更新更有料的 Python 实战题!