我试图了解递归是如何工作的。由于递归调用的放置,我有两个具有不同输出的代码。我知道应该有不同的输出,但我不明白为什么输出是这样的。
代码 1(打印后进行递归调用):
public class Test {
public static void main(String[] args) {
xMethod(5);
}
public static void xMethod(int n) {
if (n > 0) {
System.out.print(n + " ");
xMethod(n - 1);
}
}
}
上面的输出是 5 4 3 2 1。我明白为什么我会得到这个输出。这是因为首先打印5,然后将5减去1,然后打印4,以此类推。
我不明白的是以下代码的输出,当递归调用位于打印之前。
代码 2(在打印之前进行递归调用):
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 + " ");
}
}
}
上面的输出是 1 2 3 4 5。我不知道为什么会得到这个输出。我会想象输出是 4 3 2 1,因为减去 5,然后打印为 4,依此类推。但这显然不是这样的。
有人可以帮助我了解递归过程中发生了什么吗?