为什么输出给出43211234而不是43210

时间:2017-06-22 20:21:06

标签: java if-statement

这是计算机科学中的问题我不明白的课程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);
    }
}

2 个答案:

答案 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%104。然后打印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);
         }
    }
}