function fac(n) {
if (n == 0)
return 1;
else
return (n - 1) * n;
};
console.log(fac(4));
// 12
这里一切都清楚(4-1)* 4 = 12
function fac(n) {
if (n == 0)
return 1;
else
return fac(n - 1) * n;
};
console.log(fac(4));
//24
这是我迷惑的是递归呼叫?因为我们在其内部返回fac函数是否是善意的调用?我理解如何调用函数,就像在这个例子中的console.log(fac(4));,但我不明白它是如何计算return fac(n - 1)* n; 我有一个人可以解释计算是如何进行的,另外一件事我不知道代码是不同的,在这两个例子中,只返回值而其他返回什么?功能在功能....这里是我困惑的地方。 谢谢你的时间!
答案 0 :(得分:1)
是的,这是一个递归调用。该函数继续调用自身并递减参数,直到传递的值为0.函数不会返回自身,它会调用自身并返回结果。这是有效的,因为函数在作为参数传递0时终止并停止调用自身。
所以它是
fac(4)
- > fac(3) * 4
- > fac(2) * 3 * 4
- > fac(1) * 2 * 3 * 4
- > fac(0) * 1 * 3 * 4
- > 1 * 1 * 2 * 3 * 4
- > 24
答案 1 :(得分:1)
答案 2 :(得分:0)
是的,它被称为递归。
为fac(4)
计算的值如下:
fac(4) = fac(3) * 4
fac(3) = fac(2) * 3
fac(2) = fac(1) * 2
fac(1) = fac(0) * 1
fac(0) = 1
所以最终它会像
fac(4) = 1 * 1 * 2 * 3 * 4
这是评估它的方式,因此你得到了你的阶乘价值。