我听说过ES6的TCO,但我无法理解,因为下面的代码无效。
function sumTailRecursion(n, accumulator) {
if (n == 0) return accumulator;
accumulator += n;
return sumTailRecursion(--n, accumulator);
}
console.log(sumTailRecursion(10000, 0)); // ok!
console.log(sumTailRecursion(100000, 0)); // overflow
如果Chrome Engine使用TCO,我认为代码必须正常运行。
我知道其他基础编译器提供TCO,实际上,它们从递归变为for循环,因此堆栈的恶化不存在。
我想知道这个问题的原因。我有任何机会理解错误吗?
答案 0 :(得分:0)
在线阅读Tail Call Optimization,我发现了一篇很棒的文章http://benignbemine.github.io/2015/07/19/es6-tail-calls/
TCO的工作原理是:
我认为您的代码符合上述规则。
您可能需要在此处检查浏览器的兼容性: https://kangax.github.io/compat-table/es6/#chrome62