Java递归输出

时间:2015-11-19 02:29:14

标签: java recursion

我可以知道为什么输出为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);
  }
}

3 个答案:

答案 0 :(得分:2)

以下是流程的工作原理:

  1. index == 0,致电count(1)
  2. index == 1,致电count(2)
  3. index == 2;打印2并且count()的此迭代返回到步骤#2,并继续到count()中的下一步,即System.out.println(i),打印1
  4. 与步骤3相同,从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。在递归调用完成后发生(并生成了自己的输出)。

关键是进行递归调用不会停止执行方法的其余部分;它只是延迟它直到递归调用返回。