在ES6中,“尾调用”如何避免堆栈溢出?

时间:2016-07-17 07:27:30

标签: javascript algorithm stack-overflow tail-recursion

在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)

我搜索了但我仍然无法理解。

  1. 有人可以向我解释为什么旧的javascript(ES5)会出现递归算法的问题吗?

  2. “尾巴召唤”如何避免这个问题?

0 个答案:

没有答案