在以下脚本中,为什么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;
}
答案 0 :(得分:5)
你的生成无限循环
badFactorial(n * (n-1));
它会不断增加。
说你7分过去了。而不是减少,你正在做 return badfactorial(7 * 6)
何时需要:
return badfactorial(6) * 7;
所以改变回报就好像你是好因素,
badfactorial(n-1) * n;
答案 1 :(得分:2)
因为在
badFactorial(n * (n-1))
n的值总是在增加,它永远不会达到0.这就是你得到那个错误的原因。
在第二种情况下,
return goodFactorial(n-1) * n;
n每次递减,这对任何递归函数都非常重要。
永远记住在递归调用方面,n或任何参数的值必须减少,否则你将得到stackoverflow错误。