簡體   English   中英

Var ++在JavaScript的遞歸函數參數中導致RangeError

[英]Var++ causes RangeError in recursive function parameter in JavaScript

我在JavaScript計算數字階乘中有一個簡單的線性遞歸函數。

function factorialImproved(n) {

  function factorialIter(p, c, m) {
    if (c > m) {
      return p;
    } else {
      return factorialIter(c * p, c++, m); // RangeError: Maximum call stack size exceeded // ++c or c+1 is OK
    }
  }

  return (factorialIter(1, 1, n))
}

我試圖弄清楚為什么我用c++而不是++cc+1會得到RangeError。

(c++)計算結果為c 因此,您每次都用相同的c調用factorialIter

因此,除非n < 1否則c = 1不會大於m = n

但是, (++c)計算結果為c+1 只要記住以下規則:

  • (++c) :首先遞增,然后c
  • (c++) :首先是c然后遞增。

我認為您應該使用c+1 除非以后要在該范圍內使用c ,否則不要使用c++++c

您返回c的相同值,因為使用后綴遞增 ,它將返回實際值,然后將變量遞增。

為了獲得結果,您可以僅使用c + 1作為值。 或使用前綴增量。 但是,如果您不再使用該變量,則不建議使用。

 function factorialImproved(n) { function factorialIter(p, c, m) { if (c > m) { return p; } else { return factorialIter(c * p, c + 1, m); // RangeError: Maximum call stack size exceeded // ++c or c+1 is OK } } return (factorialIter(1, 1, n)) } console.log(factorialImproved(5)); 

暫無
暫無

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

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