详解递归,了解一下JavaScript递归

前言

在编程中,递归大家肯定都不陌生了吧,今天我们来总结总结有关于递归的东西。

什么?! 你陌生, 去刷题去,完后你就熟了。

递归的定义

程序调用自身的编程技巧称为递归

递归长什么样子

提到举例子我们肯定第一个想到的就是阶乘。

n! = n * (n-1) * (n-2) * …* 1(n>0)

5! = 5 * 4 * 3 * 2 * 1

阶乘是我们从小学数学就接触的东西,没想到它现在还陪伴着我们🙄

用代码实现一下:

function recursion(n) {
    if (n == 1) return n
    return n * recursion(n - 1)
}

console.log(recursion(5)) // 5 * 4 * 3 * 2 * 1 = 120

再举一个例子吧,也是我们初高中课本上的,著名的河内塔问题:

河内塔.png

这个问题也是用递归来解决的:

function hanoi( n, p1, p2, p3)
{
	if(1 == n)
		
		console.log('盘子从' + p1 + '移动到' + p3);
	else
	{
		hanoi(n-1, p1, p3, p2);
		console.log('盘子从' + p1 + '移动到' + p3);
		hanoi(n-1, p2, p1, p3);
	}
}
hanoi(3,'p1','p2','p3');

河内塔结果.png

总结一哈

既然要写递归,就要知道它具备什么条件,从上面的例子不难看出,递归是具有边界条件的,阶乘中的n==1和河内塔中的1==n都是边界条件,递归还具有两个部分,边界条件满足的时候进入返回过程,边界条件不满足的时候,再次进入递归过程。

那么它还具有什么特点呢?

  • 它必须有一个出口条件,也就是要有一处作为结束,变成非递归的样子处理。
  • 递归处理的子问题要同原问题一样,并且逐渐变得简单。

总结一下:我们写的递归要具有边界条件,和基于边界条件分别做出的两部分处理过程。

并且使用递归是要逐渐使得问题变得简单,最终用非递归的方法作为结尾哦。

最后

我觉得,递归是思考过后对于问题提出的一种解决方案。

在你提出用递归解决的时候,就已经知道他的边界条件是什么了,只需要写出递归的那部分,随后使用非递归的方式作为程序出口即可。

点个赞,一起学习进步吧♥

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是乃德也是Ned

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值