gpt4 book ai didi

javascript阶乘函数得到RangeError

转载 作者:搜寻专家 更新时间:2023-10-31 23:44:45 27 4
gpt4 key购买 nike

const factorial = function(n, acc = 1){
if (n < 2) {
return acc;
}
return factorial(n - 1, n * acc);
};
const factorial_normal = function(n){
if (n < 2) {
return 1;
}
return n * factorial_normal(n - 1)
};
console.log(factorial(8956)); // RangeError: Maximum call stack size exceeded
console.log(factorial_normal(8960)); // Infinity

这只是一个简单的 javascript 阶乘函数。但是我在第一个函数中得到了一个 RangeError,我认为这是一个更好的解决方案,因为我认为它更快并且更节省堆栈。我所知道的这两个功能有什么不同吗?请帮助我,谢谢。

最佳答案

因为 Node.js 不支持尾调用优化,这两个函数都会在某些时候抛出 RangeError: Maximum call stack size exceeded 错误。何时发生取决于两个量:堆栈的最大允许大小和每个单独堆栈帧的大小。默认情况下,堆栈的大小设置为某个常量值,您可以通过运行以下命令获取该值:

node --v8-options | grep -e '--stack-size' -A 1

因此,剩下的唯一参数就是栈帧的大小。 factorial 在每次函数调用时在堆栈上存储两个变量 - accn。而 factorial_normal 只存储一个 - n。这意味着 factorial 将比 factorial_normal 更快地用完堆栈空间。

关于javascript阶乘函数得到RangeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51404634/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com