繁体   English   中英

jfact Factorial函数得到了RangeError

[英]javascript Factorial function got RangeError

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在某些时候RangeError: Maximum call stack size exceeded错误。 何时发生这种情况取决于两个数量:堆栈的最大允许大小和每个堆栈帧的大小。 默认情况下,堆栈的大小设置为某个常量值,您可以通过运行以下命令获得该值:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM