public class Main {
public static void main(String[] args) {
pop1(1234);
}
public static void pop1(int x){
System.out.print(x % 10);
if ((x / 10) != 0){
pop1(x/10);
}
System.out.print(x % 10);
}
}
输出:43211234
我不明白输出。 过去'4321'是好的;但最后一部分'1234'是如何生成的?
答案 0 :(得分:0)
最后System.out.print(x % 10);
- >此行会导致值1,2,3,4
被打印。这是每个方法调用的最后一行。
输入X:4->3->2->1
(现在从此处开始打印)
打印1,然后堆栈展开(方法返回),然后2打印等等..
答案 1 :(得分:0)
当pop1函数从递归返回时调用第二个打印 - 这是其他四个数字以相反顺序打印的原因。删除它,你会没事的。
答案 2 :(得分:0)
第一次致电:
System.out.print(x % 10);
生成反向编号4321
,而第二次调用生成直接订单1234
。因此,如果您只需要直接/反向订单,请删除行。
因此,您从第二个1234
调用中获得直接订单print()
,因为它在递归调用之后执行,即最里面的递归调用在第一个位置打印1
,而最外面的调用打印{{ 1}}在最后一个地方。
答案 3 :(得分:0)
为了可视化发生的事情,您可以像这样修改代码
public class Main {
public static void main(String[] args) {
pop1(1234);
}
public static void pop1(int x){
System.out.println("enter: " + x % 10);
if ((x / 10) != 0){
pop1(x/10);
}
System.out.println("leave: " + x % 10);
}
}
产生输出
enter: 5
enter: 4
enter: 3
enter: 2
enter: 1
leave: 1
leave: 2
leave: 3
leave: 4
leave: 5
将此输出与@TheLostMind的答案结合起来,您将了解代码的工作原理。