【python基础-23】递推和递归

递推与递归(Iteration vs Recursion)

递推(Iteration)递归(Recursion) 是两种解决问题的方法,主要区别在于实现方式:

方式 定义 特点 适用场景
递推(Iteration) 通过循环计算下一个状态 占用内存少,运行效率高 适用于简单问题,如循环累加
递归(Recursion) 函数调用自身来求解问题 代码简洁,但占用较多内存(调用栈) 适用于分治算法树形结构

1. 递推(Iteration)

递推是利用循环,不断更新前面计算的值,从而得到最终结果。

(1)斐波那契数列(递推法)

斐波那契数列公式:
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(n1)+F(n2),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

优点

  • 占用内存少
  • 运行效率高

缺点

  • 代码可读性较低,尤其对于复杂问题

2. 递归(Recursion)

递归是函数调用自身来求解问题,通常包含:

  1. 基准条件(终止条件)
  2. 递归公式(不断调用自身)

(1)斐波那契数列(递归法)

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

3. 递归 vs 递推(对比总结)

比较项 递推(Iteration) 递归(Recursion)
实现方式 通过循环 通过函数调用自身
代码长度 代码较长 代码简洁
内存占用 高(调用栈)
运行效率 低(可能重复计算)
适用场景 线性问题,如遍历数组、累加 树形问题,如二叉树、汉诺塔

选择哪种方法?

  • 简单问题(如累加、遍历):递推
  • 树形结构(如二叉树遍历):递归
  • 分治算法(如快排、归并排序):递归
  • 需要最优性能递推

掌握递推与递归,能帮助你更高效地解决问题!

你可能感兴趣的:(小孩AI-python基础,python,算法,数据结构)