递推(Iteration) 和 递归(Recursion) 是两种解决问题的方法,主要区别在于实现方式:
方式 | 定义 | 特点 | 适用场景 |
---|---|---|---|
递推(Iteration) | 通过循环计算下一个状态 | 占用内存少,运行效率高 | 适用于简单问题,如循环累加 |
递归(Recursion) | 函数调用自身来求解问题 | 代码简洁,但占用较多内存(调用栈) | 适用于分治算法、树形结构 |
递推是利用循环,不断更新前面计算的值,从而得到最终结果。
斐波那契数列公式:
F ( n ) = F ( n − 1 ) + F ( n − 2 ) , F ( 0 ) = 0 , F ( 1 ) = 1 F(n) = F(n-1) + F(n-2),\quad F(0) = 0, \quad F(1) = 1 F(n)=F(n−1)+F(n−2),F(0)=0,F(1)=1
迭代(递推)求解:
def fibonacci_iter(n):
if n == 0: return 0
if n == 1: return 1
a, b = 0, 1
for _ in range(2, n + 1):
a, b = b, a + b
return b
print(fibonacci_iter(10)) # 输出: 55
✅ 优点:
❌ 缺点:
递归是函数调用自身来求解问题,通常包含:
def fibonacci_rec(n):
if n == 0: return 0
if n == 1: return 1
return fibonacci_rec(n-1) + fibonacci_rec(n-2)
print(fibonacci_rec(10)) # 输出: 55
✅ 优点:
❌ 缺点:
优化递归 - 记忆化存储
def fibonacci_memo(n, memo={}):
if n in memo:
return memo[n]
if n <= 1:
return n
memo[n] = fibonacci_memo(n-1, memo) + fibonacci_memo(n-2, memo)
return memo[n]
print(fibonacci_memo(10)) # 输出: 55
比较项 | 递推(Iteration) | 递归(Recursion) |
---|---|---|
实现方式 | 通过循环 | 通过函数调用自身 |
代码长度 | 代码较长 | 代码简洁 |
内存占用 | 低 | 高(调用栈) |
运行效率 | 高 | 低(可能重复计算) |
适用场景 | 线性问题,如遍历数组、累加 | 树形问题,如二叉树、汉诺塔 |
掌握递推与递归,能帮助你更高效地解决问题!