析函数运行错误:超出最大调用堆栈大小

问题描述 投票:-2回答:2

我已经使用javascript制作了计算器。我想添加阶乘,但是chrome对我说:已超出最大调用堆栈大小。这些是代码的某些部分,我确定问题是这些代码不是其他

function fac(firstNum){
    firstNum=Number(document.getElementById('result').value);
    if(firstNum==0){
        document.getElementById('result').value = 1;
    }
    var a = firstNum*fac(firstNum-1);
    document.getElementById('result').value = a;
}

并将功能用于开关盒

case 'n!':
    document.getElementById('result').value = fac();
break;

怎么了?

javascript factorial
2个回答
1
投票

您需要将阶乘算法与UI代码分开。

function factorial(n) {
  if (n == 0) {
    return 1;
  } else {
    return n * factorial(n - 1);
  }
}

然后使用此代码从UI字段检索数字,例如factInput并放置结果字段,例如factResult

var number = document.getElementById('factInput').value;
document.getElementById('factResult').value = factorial(number);

HTH,布莱恩


0
投票

您可以尝试以下方法:

function factorial(n) {
  if (n < 0 || n > 12)
  throw new RangeError();
  return n <=1 ? 1 : n*factorial(n-1);
}
© www.soinside.com 2019 - 2024. All rights reserved.