无法理解计算的逻辑

时间:2014-10-11 16:28:52

标签: javascript

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; 我有一个人可以解释计算是如何进行的,另外一件事我不知道代码是不同的,在这两个例子中,只返回值而其他返回什么?功能在功能....这里是我困惑的地方。 谢谢你的时间!

3 个答案:

答案 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)

这是阶乘5的示例,但它与4

相同

This is an example I found online

尝试以下链接了解详情: http://www.c-point.com/javascript_tutorial/recursion.htm

http://www.codecademy.com/courses/javascript-lesson-205/0/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

这是评估它的方式,因此你得到了你的阶乘价值。