理解Javascript递归

understanding Javascript recursion

本文关键字:递归 Javascript 理解      更新时间:2023-09-26

我试图把我的头绕在递归函数上,我不理解输出(这个例子来自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/

如果调用chirp(1),结果将是"chirp1"

如果你调用chirp(2),结果将是chirp(1) + "-chirp2",即"chirp1-chirp2"

如果你调用chirp(3),结果将是chirp(2) + "-chirp3",即"chirp1-chirp2-chirp3"

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

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

如果您在构建时看到输出,它看起来像:

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

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