无法理解JavaScript Recursion调用输出

时间:2014-05-08 11:02:09

标签: javascript recursion

我对这段代码感到困惑。当我进行递归调用时,每次调用时都会执行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>

感谢。

3 个答案:

答案 0 :(得分:4)

按步骤可视化递归调用树可能会有所帮助:

1. foo1()
2.     foo2()
3.         foo3()
4.         document.write()
5.     document.write()
6. document.write()

以此为例,尝试可视化在递归调用之前document.write调用时树的外观。

答案 1 :(得分:0)

每次调用函数时都会执行document.writeln()(在条件下直到if函数内的语句返回true)。因此该函数的输出是         “10 9 8 7 6 5 4 3 2 1”

答案 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] + " ");
    }
}