请解释一下。行返回num * factorialize(num - 1)。假设我们有一个整数5作为参数。必须是5 * factorialize(5-1)= 5 * 4 = 20.我们如何到达120?
function factorialize(num) {
if (num === 0) {
return 1;
}
return num * factorialize(num - 1);
}
factorialize(5)
答案 0 :(得分:0)
引述您的问题
假设我们有一个整数5作为参数。必须是5 * factorialize(5-1)= 5 * 4 = 20.我们如何达到120?
当您从5 * factorialize(5 - 1)
开始时,您评估5-1为4(正确),但随后您将该调用放入factorialize。这就是你20岁的方式。
让我们采用factorialize
功能并逐步完成它。
function factorialize(num) {
if (num === 0) {
return 1;
}
return num * factorialize(num - 1);
}
factorialize(5)
由于5被传递到factorialize,因此局部变量num
不等于0.此函数返回num * factorialize(num - 1)
。由于num
为5,我们将继续并开始插入数字。
= 5 * factorialize(5 - 1)
现在,我们再次呼叫factorialize
,这次传入4(5 - 1)。这仍然不等于0,所以让我们用它的返回值替换factorialize(5 - 1)
(因为num
因为对factorialize的调用是4,我们将返回{{1} }
4 * factorialize(4 - 1)
和以前一样,我们现在再次调用factorialize,这次是3次传递。
= 5 * (4 * factorialize(4 - 1))
等等
= 5 * (4 * (3 * factorialize(3 - 1)))
等等
= 5 * (4 * (3 * (2 * factorialize(2 - 1))))
现在= 5 * (4 * (3 * (2 * (1 * factorialize(1 - 1)))))
返回1; if语句最终计算结果为true。这是基本情况,这是一个已知的答案,无需进一步使用递归即可表达。取而代之的是,我们得到了这个:
factorialize(0)
这在数学上等同于
= 5 * (4 * (3 * (2 * (1 * 1))))
等于
= 5 * 4 * 3 * 2 * 1 * 1