簡體   English   中英

遞歸 JavaScript Function 導致“范圍錯誤:超出最大調用堆棧大小”

[英]Recursive JavaScript Function Results in “Range Error: Maximum call stack size exceeded”

我正在嘗試創建一個產生階乘的簡單遞歸 JavaScript function。 我想我在運行下面的代碼時耗盡了調用堆棧中的本地 memory 並可能觸發無限遞歸。

*注意:我想用遞歸來解決它。

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

關於如何以及為什么我應該修改上述代碼的任何建議。

您的減量有問題:那是因為在更改操作數之前返回了操作數的原始值(您需要將 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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM