猿问

javascript中手动实现“尾递归优化”,这段代码的运行逻辑是什么?

资料地址:尾递归优化的实现
研究学习阮一峰老师的ES6教程,里面讲到了“尾递归优化”,看不懂这块的代码逻辑,代码如下:

function tco(f) {

  var value;

  var active = false;

  var accumulated = [];


  return function accumulator() {

    accumulated.push(arguments);

    if (!active) {

      active = true;

      while (accumulated.length) {

        value = f.apply(this, accumulated.shift());

      }

      active = false;

      return value;

    }

  };

}


var sum = tco(function(x, y) {

  if (y > 0) {

    return sum(x + 1, y - 1)

  }

  else {

    return x

  }

});


sum(1, 100000)

// 100001

运行了下这段代码,虽然反映比较慢,但是确实没有卡死,虽然阮一峰老师对这段代码进行了讲解,但是我还是没有调试明白。

请求大神能具体讲下这段代码的运行逻辑和优化思路,多谢了。


温温酱
浏览 423回答 1
1回答
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答