在ES6的新功能中,我无法理解“尾部呼叫”,尾部呼叫保证不会无限制地增加堆栈。在无界输入面前使递归算法安全。
function factorial(n, acc = 1) {
'use strict';
if (n <= 1) return acc;
return factorial(n - 1, n * acc);
}
// Stack overflow in most implementations today,
// but safe on arbitrary inputs in ES6
factorial(100000)
我搜索了但我仍然无法理解。
有人可以向我解释为什么旧的javascript(ES5)会出现递归算法的问题吗?
“尾巴召唤”如何避免这个问题?