Python 实现斐波那契数列
斐波那契数列简介
斐波那契数列(Fibonacci sequence)是一个经典的数学序列,其定义如下:
- F(0) = 0
- F(1) = 1
- F(n) = F(n-1) + F(n-2) (当 n ≥ 2 时)
这个数列的特点是每个数字都是前两个数字之和,数列开始如下:0, 1, 1, 2, 3, 5, 8, 13, 21, 34...
Python 实现方法
1. 递归实现
def fibonacci_recursive(n):
if n <= 1:
return n
else:
return fibonacci_recursive(n-1) + fibonacci_recursive(n-2)
特点:
- 代码简洁直观
- 时间复杂度为 O(2^n),效率较低
- 适合理解递归概念但不适合大规模计算
2. 迭代实现
def fibonacci_iterative(n):
a, b = 0, 1
for _ in range(n):
a, b = b, a + b
return a
特点:
- 时间复杂度为 O(n)
- 空间复杂度为 O(1)
- 适合实际应用场景
3. 动态规划实现
def fibonacci_dp(n):
if n <= 1:
return n
dp = [0] * (n + 1)
dp[1] = 1
for i in range(2, n + 1):
dp[i] = dp[i-1] + dp[i-2]
return dp[n]
特点:
- 时间复杂度 O(n)
- 空间复杂度 O(n)
- 可扩展性强,适合更复杂的动态规划问题
性能比较
当 n=35 时:
- 递归方法:约 900 万次函数调用,耗时明显
- 迭代方法:35 次循环,几乎瞬间完成
实际应用场景
- 金融分析:黄金分割比计算
- 算法设计:动态规划问题
- 计算机图形学:自然生长模式模拟
- 音乐创作:音符排列组合
优化建议
对于需要多次调用的情况,可以考虑:
- 使用缓存装饰器(Python 的
@lru_cache) - 预计算并存储结果
- 使用矩阵快速幂算法(时间复杂度 O(log n))
from functools import lru_cache
@lru_cache(maxsize=None)
def fibonacci_cached(n):
if n <= 1:
return n
return fibonacci_cached(n-1) + fibonacci_cached(n-2)