美文网首页
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尾递归

    适当的尾调用可以避免递归调用时的栈膨胀 js有个执行栈,每当要执行一个函数时都会将这个函数推入栈,执行完从栈弹出。...

  • js递归,尾递归优化

    一开始阶层递归,每次递归可以获取值 优化: 使用尾递归,最后一次递归才返回所需要的值 查考文章: http://w...

  • JS_尾递归

    函数调用自身,称为递归。当递归调用是整个函数体中最后执行的语句且它的返回值不属于表达式的一部分时,这个递归调用就是...

  • Kotlin语言(九):特性

    1、尾递归优化 尾递归:函数在调用自己之后没有再执行其他任何操作就是尾递归 尾递归优化的原理就是将递归转换成迭代,...

  • 递归&尾递归

    调用栈的特点,先进后出, FILO, 场景还原。 递归 有栈溢出的可能 stack overflow 尾递归 编译...

  • 递归调用优化

    尾递归优化 函数调用自身,称为递归。如果尾调用自身,就称为尾递归。 递归非常耗费内存,因为需要同时保存成千上百个调...

  • 什么是尾调用?什么是尾递归?尾调用的优化?尾递归优化?

    尾调用优化 尾递归(尾调用优化)

  • C++ 递归算法

    递归算法,尾递归算法求阶乘!

  • 25.尾递归优化

    1.代码如下: 只有尾递归才能优化 1.需要将递归转化为尾递归2.加上关键字tailrec 2.尾递归的原理,看编...

  • 尾调用优化

    尾调用优化 尾递归 正常递归 尾递归 改写以上代码,使其只有一个参数: 总结一下,递归本质上是一种循环操作。纯粹的...

网友评论

      本文标题:js尾递归

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