我试图理解递归,并找到以下内容作为对freecodecamp递归练习进行数字分解的答案。是正确的,但我不知道它是如何运行的。
-如果'return 1'退出功能,那么输出不应该为1吗?
-所需的模式(如果为10x9x8x7等)。但是,如果每次都调用自己,是否不遵循模式10x9、9x8、8x7等?
抱歉,如果这不是一个合适的问题,请首次使用。
function factorialize(num) {
if (num === 0) { return 1; }
return num * factorialize(num-1);
}
factorialize(5);
>120
最佳答案
由于递归函数的各个结果是累积的,因此可以通过以下方式想象这一过程:
调用factorialize(5);
第一个递归步骤返回-> 5 * factorialize(4)
当前值:5 *因数分解(4)
第二个递归步骤返回-> 4 * factorialize(3)
当前值:5 * 4 *因数分解(3)
第三递归步骤返回-> 3 * factorialize(2)
当前值:5 * 4 * 3 *因式分解(2)
第四递归步骤返回-> 2 * factorialize(1)
当前值:5 * 4 * 3 * 2 *因数分解(1)
第六个递归步骤返回-> 1 * factorialize(0)
当前值:5 * 4 * 3 * 2 * 1 *因式分解(0)
第七个(最后一个)递归步骤返回-> 1
当前值:5 * 4 * 3 * 2 * 1 * 1
结果为120。
function factorialize(num) {
if (num === 0) { return 1; } // 7th step
return num * factorialize(num-1); // 1st to 6th step
}