如何理解递归(适合小白)

如何理解递归?写了这么多年代码,我居然今天才会使用递归,所以想告诉大家,递归思想不难,但是有需要注意的点。

递归是一种算法设计技巧,它的基本思想是通过将问题分解成更小的子问题来求解,直到问题足够简单,可以直接解决。这种“自我调用”的方式在很多问题中非常有效。

为了更好地理解递归,以下是递归的几个关键点:

  1. 基线条件这是递归停止的条件。当问题变得足够小,不再需要进一步递归时,递归调用就会停止并返回结果。
  2. 递归步骤:这是递归的核心部分,在每次递归中,问题被分解成一个或多个更小的子问题,并通过递归解决这些子问题。

递归的简单例子:阶乘计算

计算 n!(n的阶乘)是一个经典的递归例子。阶乘的定义是:

  • 0! = 1
  • n! = n * (n-1)!,对于 n > 0

def factorial(n):
    # 基线条件:当 n 等于 0 时,返回 1
    if n == 0:
        return 1
    # 递归步骤:n * (n-1) 的阶乘
    else:
        return n * factorial(n - 1)
阶乘递归计算过程

假设我们要计算 5!,递归的过程如下:

  1. factorial(5) 会调用 5 * factorial(4)
  2. factorial(4) 会调用 4 * factorial(3)
  3. factorial(3) 会调用 3 * factorial(2)
  4. factorial(2) 会调用 2 * factorial(1)
  5. factorial(1) 会调用 1 * factorial(0)
  6. factorial(0) 返回 1 (基线条件)
  7. 递归返回并计算结果:
    • factorial(1) 返回 1 * 1 = 1
    • factorial(2) 返回 2 * 1 = 2
    • factorial(3) 返回 3 * 2 = 6
    • factorial(4) 返回 4 * 6 = 24
    • factorial(5) 返回 5 * 24 = 120

最终结果 5! = 120

斐波那契数列的例子

斐波那契数列的定义如下:

  • F(0) = 0
  • F(1) = 1
  • 对于 n ≥ 2, F(n) = F(n-1) + F(n-2)

斐波那契数列是这样排列的:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...。它的每一项是前两项的和。

递归实现斐波那契数列

我们可以用递归来实现这个数列:

def fibonacci(n):
    # 基线条件:F(0) = 0 和 F(1) = 1
    if n == 0:
        return 0
    elif n == 1:
        return 1
    # 递归步骤:F(n) = F(n-1) + F(n-2)
    else:
        return fibonacci(n-1) + fibonacci(n-2)

递归计算过程

假设我们要计算 F(5),递归过程如下:

  1. fibonacci(5) 会调用 fibonacci(4) + fibonacci(3)
  2. fibonacci(4) 会调用 fibonacci(3) + fibonacci(2)
  3. fibonacci(3) 会调用 fibonacci(2) + fibonacci(1)
  4. fibonacci(2) 会调用 fibonacci(1) + fibonacci(0)
  5. fibonacci(1) 返回 1
  6. fibonacci(0) 返回 0

回溯过程中,逐步计算:

  • fibonacci(2) 返回 1 + 0 = 1
  • fibonacci(3) 返回 1 + 1 = 2
  • fibonacci(4) 返回 2 + 1 = 3
  • fibonacci(5) 返回 3 + 2 = 5

最终结果 F(5) = 5

测试题:

看了以上两个例子,自己编一个简单的递归吧,实现对正整数n,从1到n求和

如果轻松编出来,就代表你已经理解递归了

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值