资料地址:尾递归优化的实现
研究学习阮一峰老师的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
运行了下这段代码,虽然反映比较慢,但是确实没有卡死,虽然阮一峰老师对这段代码进行了讲解,但是我还是没有调试明白。
请求大神能具体讲下这段代码的运行逻辑和优化思路,多谢了。
相关分类