如何玩转递归

一、什么是递归

        递归就是函数内部调用自身函数

        递归本质上就是循环,但是相比循环来讲,更加的灵活,可以根据需求,传入想要的数据或内容

function func(){
      console.log("123456787654");
      func();  // 递归
}
func(); 

        以上代码实例为一个并不完整的递归,有瑕疵,上面有提到过递归的本质上是循环,func函数调用自身函数可以看作为循环体,那么循环判定的条件表达式好像以上代码实例并没有,所以这个递归函数会一直执行打印123456787654;

        所以在使用递归时,一定要存在退出条件!!!

二、递归的经典案例

  光说不练假把式,直接上一个小小的案例:使用递归算出5的阶乘

function mul(n){
    if(n == 1){
        return 1
    }else{
        return n * mul(n - 1)
    }
}
console.log(mul(5)) // 120

在数学中5的阶乘为 1 * 2 * 3 * 4 * 5 = 120;

我们可以用递归来写,因为递归是函数内部调用自身函数,所以需要用函数来包一层,再调用次此函数,又因为递归本质上就是循环,所以递归一定存在相当于循环判定的条件表达式一样的退出条件,以上实例当形参n为1的时候,递归结束

阶乘案例都出来了,那必少不了斐波那契案例

function dg(n){
    if(n <= 2){
        return 1
    }else{
        return dg(n - 1) + dg(n - 2)
    }
}
console.log(dg(10))

浅浅的分析一下,斐波拉契的规律是任取连续的三个数,前两个数相加等于第三个数。某项等于前两项的和;以上实例参数n是当前数,那么规律就出来了n的前一位加上n的前两位就是第n位的斐波拉契数,而斐波拉契的最前的两位都是1,所以退出条件也出来了,第n位的斐波那契就出来了,这不简简单单

三、递归的经典应用场景

有哪些问题我们可以考虑使用递归来解决呢?即递归的应用场景一般有哪些呢?

  • 阶乘问题
  • 二叉树深度
  • 汉诺塔问题
  • 斐波那契数列
  • 快速排序、归并排序(分治算法也使用递归实现)
  • 遍历文件,解析xml文件

四、递归的优缺点

可以一句话总结递归的优缺点:根据公式是人能够看懂的点是递归的唯一优点,其他的全是递归的缺点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值