-1

我正在尝试创建一个产生阶乘的简单递归 JavaScript 函数。我想我在运行下面的代码时耗尽了调用堆栈中的本地内存,并可能触发无限递归。

*注意:我想用递归来解决它。

function factorial(num, factor) {
  //loop through descending order multiply
  if (num === 1) {
    return newNum
  }
  let newNum = num --;
  let newProduct = num * newNum;
    //recurse
  return factorial(newNum, newProduct);
}

// Test cases
console.log(factorial(4)); // -> 24
console.log(factorial(6)); // -> 720
console.log(factorial(0)); // -> 1

关于如何以及为什么我应该修改上述代码的任何建议。

4

1 回答 1

1

您的减量有问题:那是因为在更改操作数之前返回了操作数的原始值(您需要将 num-- 更改为 --num)。你能看看这个https://codeburst.io/javascript-increment-and-decrement-8c223858d5ed。您可以通过此更改您的代码

function factorial(num, factor=1) {
  //loop through descending order multiply
  if (num <= 1) {
    return factor
  }

  let newProduct = factor * num--;
    //recurse
  return factorial(num, newProduct);
}
于 2020-07-11T22:08:43.640 回答