【问题标题】:Recursion on JavascriptJavascript 上的递归
【发布时间】:2017-10-15 10:17:59
【问题描述】:

我想知道递归在 Javascript 中是如何工作的。下面我举个例子:

function abc(n){
     document.write(n + "<br>");
     if (n < 4){
         abc(n+1);
         document.write(n + "<br>");
     }
}

我的注意力在第 5 行。 5号什么时候执行?第 5 行是在递归之前执行还是在递归之后执行?

谢谢。

【问题讨论】:

  • 递归后会调用第二个document.write
  • 写指令位于递归函数调用之后,因此将在递归调用之后执行;-)
  • 在 javascript 中,递归的工作方式与任何其他命令式编程语言相同。要了解语句的执行顺序,您可以尝试一下或考虑一个示例。

标签: javascript recursion


【解决方案1】:

它在第一个完成的递归之后执行。它遵循Depth-first search 原则。

    levels                 comment
-------------  ----------------------------------
1
    2
        3
            4  end of recursion calls, max depth
        3
    2
1

function abc(n){
     document.write(n + "<br>");
     if (n < 4){
         abc(n+1);
         document.write(n + "<br>");
     }
}

abc(0);

【讨论】:

    【解决方案2】:

    递归后执行。递归调用函数中的函数,直到满足条件。在您的情况下,变量 n 应该小于 4,以便递归进入“更深”的功能级别。

    abc(1) -> abc(2) -> abc(3)

    所以在程序可以转到其他行之前,您将有 3 次同步函数调用。

    【讨论】:

      【解决方案3】:

      递归后执行

      function abc(n){
           document.write(n + "<br>");
           if (n < 4){
               abc(n+1);
               document.write(n + " Foo<br>");
           }
      }
      
      abc(1)

      【讨论】:

      • 是在所有递归之后执行还是在第一次递归之后执行?
      • @billyhalim25 你可以运行代码 sn -p。您将看到它将显示从 1 到 4 的所有迭代。然后它将显示带有foo的数字
      • 是的,我明白了。但是程序如何记住 document.write(n + " Foo&lt;br&gt;"); 中 n 的值,因为这些行一直在排队,直到所有递归完成?
      猜你喜欢
      • 2014-11-30
      • 2015-05-01
      • 2012-09-29
      • 1970-01-01
      • 1970-01-01
      • 2019-01-27
      • 2015-01-08
      • 1970-01-01
      相关资源
      最近更新 更多