JavaScript 递归理解 (二)

一、递归的简介

使用递归可以更自然地解决一些问题。例如,像斐波那契数列:数列中的每个数字都是数列中前两个数字的和。凡是需要您构建或遍历树状数据结构的问题基本都可以通过递归来解决,锻炼自己强大的递归思维,你会发现解决这类问题十分容易。

二、数字的递归

每个递归函数都需要一个终止条件,从而使其不会无休止地循环下去。然而,仅仅加一个终止条件,是不足以避免其无限循环的。该函数必须一步一步地接近终止条件。在递归步骤中,问题会逐步简化为更小的问题。

假设有一个函数:从 1 加到 n。例如,当 n = 4,它实现的就是 “1 + 2 + 3 + 4”。
首先,我们需要寻找终止条件。这一步可以认为是找到那个不通过递归就直接结束该问题的条件。当 n 等于 0 时,没法再拆分了,所以我们的递归在到达 0 时停止。
在每一步中,你将从当前数字减去 1。什么是递归条件?就是用减少的数字调用函数sum
在这里插入图片描述
每一步过程如下:

  • 执行sum(4)。
  • 4等于0么?否,把sum(4)保留并执行sum(3)。
  • 3等于0么?否,把sum(3)保留并执行sum(2)。
  • 2等于0么?否,把sum(2)保留并执行sum(1)。
  • 1等于0么?否,把sum(1)保留并执行sum(0)。
  • 0等于0么?是,计算sum(0)。
  • 提取sum(1)。
  • 提取sum(2)。
  • 提取sum(3)。
  • 提取sum(4)。

这是查看函数如何处理每个调用的另一种方式:
在这里插入图片描述
我们可以发现,递归条件中的参数不断改变,并逐渐接近并最终符合终止条件。在上面的案例中,我们在递归条件中的每一步都将参数减 1,最后在终止条件中测试参数是否等于 0。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值