这是计算机科学中的问题我不明白的课程description。我期望值为43210,因为if语句将使用(x%10)达到0,打印出来然后停止。
当我查看Eclipse调试器时,我看到x的值从1234到123,再到12,再到1 ......但是它显示x值会回到12,123,1234。所以实际产量为43211234。
问题:为什么x值会回归原始输入?
public class Mystery
{
public static void main(String []args){
Mystery strange = new Mystery();
strange.mystery(1234);
}
public void mystery(int x){
System.out.print(x%10);
if((x/10) != 0){
mystery(x/10);
}
System.out.print(x%10);
}
}
答案 0 :(得分:2)
public void mystery(int x){
System.out.print(x%10);
if((x/10) != 0){
mystery(x/10);
}
System.out.print(x%10);
}
因此,mystery(1234)
将首先打印1234%10
或4
。然后打印mystery(123)
,然后打印另一个4
。
mystery(123)
会做什么?首先打印3
,然后打印mystery(12)
打印,然后3
。
mystery(12)
会做什么?首先打印2
然后打印mystery(1)
打印,然后2
。
mystery(1)
将打印11
,而无需再次致电mystery
。
所以现在我们确切知道mystery(12)
会做什么。先是2
,然后是11
,然后是2
,或2112
。
我们现在知道的mystery(123)
是3
,然后是2112
,然后是3
。或321123
。
总而言之,我们得到43211234
。
答案 1 :(得分:2)
x = 1234 print(4)< ------ | ***
x = 123 print(3)< ------ | **
x = 12 print(2)< ------- | *
x = 1 print(1)print(1) 返回----- | *
x = 12 print(2)返回----- | **
x = 123 print(3)返回------ | ***
x = 1234 print(4)
最后打印0:
public class Mystery
{
public static void main(String []args){
Mystery strange = new Mystery();
strange.mystery(1234);
}
public void mystery(int x){
System.out.print(x%10);
if((x/10) != 0){
mystery(x/10);
}
else{
System.out.print(0);
}
}
}