【发布时间】:2017-04-13 12:30:28
【问题描述】:
当递归只被调用一次时,我理解递归,当有两个递归时,我有点理解递归,因为一个递归必须先完成,或者在第二个开始之前完成。
我正在尝试理解河内塔,但我真正不明白的是当有两个带有打印语句的递归时读取代码行的顺序。
有人可以简单地分解订单吗?我创建了这个简单的示例(其中 test(3); )
为什么打印语句会运行?,它不是立即在自己身上调用吗?
public static void test(int n){
if(n>0){
test(n-2);
test(n-1);
System.out.println("print " + n);
}
}
【问题讨论】:
-
"我真的不明白代码行的读取顺序。有人可以简单地分解顺序吗?" 您可以使用调试器查看如何执行时流程继续。
-
打印语句只在所有中间方法调用都返回后运行,所以中间方法调用会在当前调用之前打印并返回。
-
我不确定如何使用调试器来显示打印语句。通过正常步骤运行它只会显示它读取的行。 @berger,所以每次方法调用自己时,它都会执行 print 语句,对吗?
-
@DavidB : 是的,在当前方法调用中对方法的新调用将首先打印。