JavaScript析因递归

时间:2014-12-05 14:49:52

标签: javascript recursion

在以下脚本中,为什么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;
}

2 个答案:

答案 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错误。