2014-10-11 73 views
0
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

我认为你在这里有格式化问题,应该是2个独立的代码块? – 2014-10-11 16:31:07

回答

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

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 

这是它如何被评估,因此你会得到你的阶乘值。