Cob*_*kal 1 javascript recursion
我在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))
}
Run Code Online (Sandbox Code Playgroud)
我试图弄清楚为什么我得到RangeError c++而不是++c或者c+1.
(c++)评估为c.所以,你在呼唤factorialIter以相同的c每一次.
因此,c = 1不会大于m = n除非n < 1.
但是,(++c)评估为c+1.记住这条规则:
(++c):然后先增加c.(c++):先c增加.在我看来,你应该使用c+1.请勿使用c++或++c除非您希望c稍后在该范围内使用.