Java-递归: When does statements after a recursive method call executes

标签 java data-structures recursion

方法调用本身之后的语句何时执行?

private void inorderHelper(TreeNode node)
{
    if ( node==null )
        return;
    inorderHelper(node.leftNode);
    System.out.printf("%d", node.data);
    inorderHelper(node.rigthNode);
}

我能看到的是,inorderHelper(node.leftNode)这行代码将继续迭代,直到node == null,并且该方法在打印node.data之前立即终止。我认为我没有得到很好的递归,但我能找到的所有示例在递归调用后都没有语句。我想知道的是像 System.out.printf("%d",node.data) 这样的语句什么时候会在方法返回之前执行?

最佳答案

您似乎正在考虑方法的单次激活。在递归调用的情况下,同一个方法可以被调用多次。每个调用都有自己的堆栈帧。返回仅从调用它的激活中返回。当它返回时,控制权将转移回调用它的激活,就像它是由不同的方法调用的一样。

递归调用后的代码在每次激活中运行,并在从它调用的激活返回时立即运行。

关于Java-递归: When does statements after a recursive method call executes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13926344/

相关文章:

java - 为什么我收到错误?

c++ - 对递归数独回溯函数的模糊调用。

math - 为什么 powerset 给出 2^N 的时间复杂度?

java - JAX-RS 与 RESTeasy : automatic scanning of resources?

Java 帮助 - MySQL - SQLConnector "recurse infinitely"& 控制台打印无限

java - 无法使用 Hibernate 在数据库中创建表

java - 如何从 java 中的另一个类调用 hashmap 及其值?

data-structures - 哪种算法最适合遍历加权有向图,提供起点和终点?

python - 如何使用生成器避免 python 中的最大递归深度?

Java:清理集合中的最佳风格