我对这段代码感到困惑。当我进行递归调用时,每次调用时都会执行document.writeln()行吗?或者document.writeln()何时执行?
<SCRIPT LANGUAGE = "JavaScript">
var a = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ];
someFunction( a, 0 );
function someFunction( b, x )
{
if ( x < b.length ) {
someFunction( b, x + 1 ); //recursive call
document.writeln( b[ x ] + " " );
}
}
</SCRIPT>
感谢。
答案 0 :(得分:4)
按步骤可视化递归调用树可能会有所帮助:
1. foo1()
2. foo2()
3. foo3()
4. document.write()
5. document.write()
6. document.write()
以此为例,尝试可视化在递归调用之前document.write
调用时树的外观。
答案 1 :(得分:0)
答案 2 :(得分:0)
请注意,您将x+1
传递给了重新召唤的电话。最终,这将导致x
等于b.length
并且函数将返回。所有嵌套写入都将执行(首先更大x
)。
以下是扩展版本:
function someFunction(b, x) {
if (x < b.length) {
if (x+1 < b.length) {
if (x+2 < b.length) {
if (x+3 < b.length) {
... // Eventually the condition will be false.
}
document.writeln(b[x+2] + " ");
}
document.writeln(b[x+1] + " " );
}
document.writeln(b[x] + " ");
}
}