在下面的脚本中,为什么badFactorial
在goodFactorial
工作时吹堆栈?
function badFactorial(n){
if( n < 0){
return 1;
}
if(n < 2){
return n;
}
return badFactorial(n * (n-1));
}
function goodFactorial(n){
if(n < 2){
return n;
}
return goodFactorial(n-1) * n;
}
你创造了一个无限循环
badFactorial(n * (n-1));
它只会继续增加。
假设你在 7 中通过. 你不是在减少,而是在做
return badfactorial(7 * 6)
当您需要 :
return badfactorial(6) * 7;
所以把回报改成像你好因子的,
badfactorial(n-1) * n;
因为在
badFactorial(n * (n-1))
n 的值总是在增加,永远不会达到 0。这就是您收到该错误的原因。
而在第二种情况下,
return goodFactorial(n-1) * n;
n 每次递减,这对于任何递归函数都非常重要。
永远记住,在递归调用方面,n 或任何参数的值必须减小,否则你会收到堆栈溢出错误。