理解Javascript递归
understanding 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开始倒数。
如果调用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
由于您只看到最终输出,因此它以升序显示。
相关文章:
- 递归Javascript对象是否会导致任何问题(内存泄漏)
- 递归JavaScript在第一次传递后返回
- 使用回调的递归Javascript函数不起作用
- 如何从外部暂停和停止递归 JavaScript 函数
- 从递归 Javascript 函数中返回一个变量
- 太多的递归JavaScript
- 扁平化多个嵌套数组的数组而不带递归 - javascript
- 递归 javascript 函数不会返回到父调用数据
- 另一个递归JavaScript函数
- 使用递归JavaScript函数进行同步的优点和缺点
- 用于联机状态的递归Javascript函数
- 简单递归Javascript函数返回Undefined
- 返回语句在递归javascript算法,如何返回所有的方式堆栈
- 无限循环与递归javascript函数
- 递归javascript代码出现问题
- 带参数的递归javascript函数
- 变量在递归javascript函数中变为未定义
- 内存泄漏递归javascript函数在IE,FF,谷歌浏览器
- 请解释一下这个递归javascript函数
- 尝试将递归JavaScript方法移植到C#,这种方法是否有意义