美文网首页
js尾递归

js尾递归

作者: 杯莫停_5273 | 来源:发表于2019-06-26 10:12 被阅读0次

    适当的尾调用可以避免递归调用时的栈膨胀

    js有个执行栈,每当要执行一个函数时都会将这个函数推入栈,执行完从栈弹出。

    下面是没有尾递归和尾递归的对比

    function Fei(num) {
      if(num<=1){
        return 1
      }
      return num * Fei(num-1)
    }
    

    这个是没有尾递归的递归函数,当执行Fei(4)时过程如下

    4 * Fei(3)

    4 * Fei(3) * Fei(2)

    4 * Fei(3) * Fei(2) * Fei(1)

    从上面看出,当num越大时,递归调用的栈就非常大(开始执行函数就把函数压如栈,执行完弹出)

    下面是使用了尾递归之后的函数

    function Fei(num,total=1) {
      if(num <= 1){
        return total
      }else{
        return Fei(num-1,total*num)
      }
    }
    

    当执行Fei(4)时过程如下

    Fei(3,4)

    Fei(2,12)

    Fei(1,24)

    从上不难看多,尾递归一直只存在一个函数在栈中,这样就不会造成栈膨胀了

    相关文章

      网友评论

          本文标题:js尾递归

          本文链接:https://www.haomeiwen.com/subject/hkuqcctx.html