有人可以向我解释为什么打印1 2 3 4 5?我想它会打印4 3 2 1 0但我的书和日食都说我错了.
public class whatever {
/**
* @param args
*/
public static void main(String[] args) {
xMethod(5);
}
public static void xMethod(int n){
if (n>0){
xMethod(n-1);
System.out.print(n + " ");
}
}
}
Run Code Online (Sandbox Code Playgroud)
ilo*_*mbo 19
这很简单,这些是电话
main
xMethod(5)
xMethod(4)
xMethod(3)
xMethod(2)
xMethod(1)
xMethod(0)
print 1
print 2
print 3
print 4
print 5
Run Code Online (Sandbox Code Playgroud)
所以你看到的印刷品是1,2,3,4,5
这是调用堆栈的结果.这是用来打电话后的样子n = 5.将头部旋转大约180度,因为此调用链的底部实际上是堆栈的顶部.
在递归调用中,您有两种情况 - 基本案例和递归案例.这里的基本情况是何时n == 0,并且不再发生进一步的递归.
现在,当我们开始从这些电话回来时会发生什么?也就是说,在递归步骤之后会发生什么?我们开始做System.out.print().由于存在防止递归和打印的条件n == 0,我们既不会递归也不会打印.
因此,您获得1 2 3 4 5输出的原因是由于从堆栈中弹出调用的方式.