苦苦挣扎去理解这个递归函数

时间:2014-06-12 15:42:50

标签: javascript recursion

我正在学习JavaScript中的recurssion,但很难理解这段代码:

function fac(n) {
if (n == 0)
    return 1;
  else
    return fac(n - 1) * n; //bit am having difficulty understanding
}
console.log(fac(5));

我能理解这一点:

var countdown = function(n){
    if (n>-1){
        console.log(n);
        countdown(n-1);
    } 
}

我理解阶乘的数学概念。

3 个答案:

答案 0 :(得分:1)

以下是递归运行的逐步步骤:

fac(5) = fac(4) * 5
fac(4) = fac(3) * 4
fac(3) = fac(2) * 3
fac(2) = fac(1) * 2
fac(1) = fac(0) * 1
fac(0) = 1

所以...现在一起......

fac(5) = 1 * 1 * 2 * 3 * 4 * 5 = 120

答案 1 :(得分:0)

我认为你知道什么是阶乘。此函数将输出指定为fac(n)的参数的数字的阶乘。

例如,如果您输入3,那么在第一次迭代后,您最终会输入

3 * fac(3-1)

之后你会有

3 * 2 * fac(2-1)

然后

3 * 2 * 1 * fac(0)

如果n == 0,你只做一次你最终以

结尾
3 * 2 * 1 * 1

答案 2 :(得分:0)

简单。

来自维基百科:

  

在数学和计算机科学中,当一类对象或方法可以由两个属性定义时,它们表现出递归行为:

     
      
  • 一个简单的基本案例(或案例)
  •   
  • 一组规则,将所有其他案例减少到基本案例
  •   

基础案例

这里的基本案例是0!

if (n == 0)
    return 1;

因为0! == 1

推断所有案例的规则

将所有案例减少到基本案例的规则是这个数学规则:

N!= N *(N-1)!

在你的代码中

else
    return fac(n - 1) * n;