在下面的函数中,它返回一个数字的阶乘,当递归调用该函数时,数字的高是如何存储的。
function factorialize(num) {
if (num < 3) {
return num;
}
return num * factorialize(num - 1);
}
factorialize(5);
我知道这是向后工作以实现 5 的阶乘,这是通过将所有正数乘以传递的数字获得的:
1 * 2 * 3 * 4 * 5 得到结果
我对如何存储或计算每个乘法的结果以不断向 120 的结果建立感到困惑。
谢谢大家:)
该函数正在执行检查,然后调用自身。当它再次调用自己时,它会传入计算结果。
因此,每次调用factorialize(num - 1);
时,num
将是上一次调用的结果,计算将从该值中删除 1 并将该新值传入。
步骤是这样的:
- 初始调用是
factorialize(5)
,它调用参数为 5 的函数。 - 该函数检查
5
是否小于 3(不是),如果不是,则再次调用自身。这次的参数是原始参数减去 1 - 所以4
- 下一次,它将检查 4 是否小于 3。如果没有,请再次调用自己 4 减 1 -
3
- 这一直持续到传入的参数小于 3