我可以知道为什么输出为2 1 0
而不是2
public class recur {
public static void count(int index) {
if(index < 2) {
count(index+1);
}
System.out.println(index);
}
public static void main(String args[]) {
recur.count(0);
}
}
答案 0 :(得分:2)
以下是流程的工作原理:
index == 0
,致电count(1)
index == 1
,致电count(2)
index == 2
;打印2并且count()
的此迭代返回到步骤#2,并继续到count()
中的下一步,即System.out.println(i)
,打印1 count
返回并继续System.out.println(i)
。此时,i
的值为0 答案 1 :(得分:0)
因为你的count方法调用自己。当你调用count(0)时,它会命中if块并调用count(1)。这也进入if块并调用count(2)。 2不是&lt; 2因此它不会进入if块并打印&#34; 2&#34;然后退出。此时,您返回到您调用count(1)的位置,因此它退出if块并打印1,然后退出该方法调用。现在,您回到原始方法调用count(0)开始的位置。这也会留下if块并打印0,然后退出并返回main方法。
答案 2 :(得分:0)
每当index < 2
时,count()
方法会自行递归,在递归调用中传递count+1
。在对count(index+1)
的递归调用返回后,执行继续调用System.out.println()
以获取当前值index
。在递归调用完成后发生(并生成了自己的输出)。
关键是进行递归调用不会停止执行方法的其余部分;它只是延迟它直到递归调用返回。