【问题标题】:Javascript maximum call stack exceeded超出 Javascript 最大调用堆栈
【发布时间】:2022-10-08 20:45:40
【问题描述】:
'use stict';

function sumToRecursive(n) {
  if (n === 1) {
    return 1;
  }

  return n + sumToRecursive(n - 1);
}

function measureFunctionSpeed(f) {
  let start = Date.now();

  for (let i = 0; i <= 10; i++) {
    f(i);
  }

  let end = Date.now();

  return end - start;
}

console.log(measureFunctionSpeed(sumToRecursive));

当我尝试运行上面的代码时,出现“超出最大调用堆栈”错误,但我了解到最大调用堆栈限制约为 10,000。我的代码最多有 10 个递归级别,但会引发相同的错误。有谁知道为什么?

Screenshot of execution result

【问题讨论】:

  • 0 !== 1(以及0 以下的任何内容)因此第一个sumToRecursive() 调用是一个无限“循环”

标签: javascript recursion


【解决方案1】:

循环的第一次迭代将函数0 作为i 提供,基本情况中没有涉及。

您可以从i= 1 开始for 循环,或者将基本情况检查更改为if (n &lt;= 1) {} 以覆盖0 情况。

【讨论】:

  • 是的,当我回头看时才意识到。在过去的一个小时里,我一直很困惑,就在我发布堆栈溢出问题后,我意识到了问题?。还是非常感谢!
猜你喜欢
  • 2019-05-21
  • 1970-01-01
  • 2012-06-26
  • 1970-01-01
  • 2012-03-18
  • 2013-08-23
  • 1970-01-01
  • 1970-01-01
  • 2015-10-24
相关资源
最近更新 更多