JavaScript 阶乘递归

JavaScript Factorial Recursion

本文关键字:递归 阶乘 JavaScript      更新时间:2023-09-26

在下面的脚本中,为什么badFactorialgoodFactorial工作时吹堆栈?

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 或任何参数的值必须减小,否则你会收到堆栈溢出错误。