一文搞懂递归编程(速来学习!)


一、递归的核心概念

1.1 什么是递归?

递归(Recursion)是一种编程技巧,指函数直接或间接调用自身来解决问题的方法。它通过将大问题分解为结构相同的小问题,直到遇到可以直接解决的简单情况(递归终止条件)。

生活中的递归类比

  • 俄罗斯套娃:每个娃娃的结构相同,但尺寸逐渐缩小
  • 数学归纳法:通过已知n=k的情况推导n=k+1的情况
  • 拆快递包裹:不断拆开盒子,直到找到最终物品
1.2 递归三要素
  1. 终止条件(Base Case):递归结束的条件,防止无限递归
  2. 递归步骤(Recursive Case):将问题分解为更小的同类问题
  3. 参数演进:每次递归调用时,参数必须向终止条件靠近

二、实例精讲

2.1 阶乘计算(数学问题)

问题分析

  • 阶乘定义:n! = n × (n-1) × … × 1
  • 递归关系:n! = n × (n-1)!
  • 终止条件:0! = 1

代码实现

def factorial(n):
    if n == 0:  # 终止条件
        return 1
    return n * factorial(n-1)  # 递归步骤

执行过程可视化

计算factorial(3)的步骤:
1. factorial(3) → 3 × factorial(2)
2. factorial(2) → 2 × factorial(1)
3. factorial(1) → 1 × factorial(0)
4. factorial(0) → 1 (触发终止条件)
5. 逐层返回结果:1 → 1×1 → 2×1 → 3×2 → 6

2.2 斐波那契数列(重复计算问题)

问题分析

  • 数列定义:F(0)=0, F(1)=1, F(n)=F(n-1)+F(n-2)
  • 递归树示例(F(5)):
        F(5)
       /    \
     F(4)  F(3)
     /  \   /  \
    F(3)F(2)F(2)F(1)
    ...(继续分解)...
    

基础实现

def fib(n):
    if n <= 1:
        return n
    return fib(n-1) + fib(n-2)  # 存在重复计算

优化方案(记忆化技术):

from functools import lru_cache

@lru_cache(maxsize=None)  # 使用缓存保存已计算结果
def fib(n)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值