方法调用本身之后的语句何时执行?
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/