我是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 + " ");
}
}
}
答案 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。