ES6尾递归优化堆栈溢出
- 论坛
- ES6尾递归优化堆栈溢出
25 浏览
ES6尾递归优化堆栈溢出
阅读了Dr Rauschmayer在es6中递归尾调用优化的描述后,我一直在尝试重现他详细介绍的递归阶乘函数的“零栈”执行。
使用Chrome调试器在堆栈帧之间进行步进时,我发现尾调用优化并没有发生,每次递归都会创建一个堆栈帧。
我还尝试通过在不使用调试器的情况下调用函数,而是将100000传递给阶乘函数来测试优化。这会抛出“最大堆栈”错误,这意味着实际上没有进行优化。
以下是我的代码:
const factorial = (n, acc = 1) => n <= 1 ? acc : factorial(n - 1, n * acc)
console.log( factorial(100000) )
结果:
Uncaught RangeError: Maximum call stack size exceeded