[英]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++
而不是++c
或c+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.