无法理解计算
问题描述:
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));,一般来说调用函数,但我不明白它是如何计算返回fac(n - 1)* n; 我有人可以解释计算是如何进行的,另外一个我未提供的代码在这两个例子中是不同的,一个只返回值而另一个返回什么?功能函数....这里是我困惑的地方。 谢谢你的时间!
答
是的,这是一个递归调用。该函数继续调用自身并递减参数,直到传递的值为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
答
是的,它被称为递归。
值上计算方法为对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
这是它如何被评估,因此你会得到你的阶乘值。
我认为你在这里有格式化问题,应该是2个独立的代码块? – 2014-10-11 16:31:07