理解Javascript递归

时间:2014-08-10 18:17:09

标签: javascript recursion

我试图绕过递归函数,我不理解输出(这个例子来自John Resig' Javascript Ninja'书):

var ninja = {
  chirp: function chirp(n) {
    return (n > 1) ? chirp(n-1) + "-chirp"+n : "chirp"+n;
  }
}

$('#hello').html(ninja.chirp(8));

和输出:

  

chirp1-chirp2-chirp3-chirp4-chirp5-chirp6-chirp7-chirp8

为什么n的输出增加而不是减少?在我看来,输出将从8而不是从1开始倒数。

http://jsfiddle.net/9xq7j6y8/1/

2 个答案:

答案 0 :(得分:2)

如果您致电chirp(1),结果将为"chirp1"

如果您致电chirp(2),结果将为chirp(1) + "-chirp2",即"chirp1-chirp2"

如果您致电chirp(3),结果将为chirp(2) + "-chirp3",即"chirp1-chirp2-chirp3"

如您所见,该函数调用自身获取较低数字的输出,并最后添加最高数字。

答案 1 :(得分:1)

它从8开始倒计时,但输出会附加到字符串的开头,然后你从左到右读取输出。

如果您看到正在构建的输出,它将如下所示:

-chirp8
-chirp7-chirp8
-chirp6-chirp7-chirp8
...
chirp1-chirp2-chirp3-chirp4-chirp5-chirp6-chirp7-chirp8

由于您只看到最终输出,因此它会按升序显示。