为什么此递归代码打印“ 1 2 3 4 5”?

时间:2019-07-15 20:04:04

标签: java recursion

我是Java递归的新手,在教科书中遇到了此代码。运行代码后,它会显示“ 1 2 3 4 5”,并且想知道为什么不显示“ 5 4 3 2 1”?

public class Test {
  public static void main(String[] args) {
    xMethod(5);
  }

  public static void xMethod(int n) {
    if (n > 0) {
      xMethod(n - 1);
      System.out.print(n + " ");
    }
  }
}

3 个答案:

答案 0 :(得分:1)

这是由于println()的顺序和对xMethod()的递归调用

如果您翻转两行,它将在递归调用5 4 3 2 1之前打印出来

public static void main(String[] args) {
    xMethod(5);
}

public static void xMethod(int n) {
    if (n > 0) {
        System.out.print(n + " ");
        xMethod(n - 1);
    }
}

答案 1 :(得分:0)

看,在调用代码System.out.print(n + " ");之前,将再次调用方法xMethod。但是最后一次使用n = 0调用方法时,它不会进入if块。

从这一点开始,代码开始打印从最后一次调用到第一次调用的数字。

答案 2 :(得分:0)

它只是在打印之前调用自身(这就是为什么要重复调用的原因)。打印时,n为1,因为根据n > 0的存在,n必然要退出。所以1、2、3、4、5。