【问题标题】:Why does this method print out 347 rather than 3?为什么这个方法打印出 347 而不是 3?
【发布时间】:2015-05-16 15:55:56
【问题描述】:

假设我有方法

public static void whatsIt(int n){
if (n>10)
    whatsIt(n/10);
System.out.print(n%10);
}

我调用 whatsIt(347),为什么它打印的是 347 而不是 3?

【问题讨论】:

    标签: java math bluej


    【解决方案1】:

    您可以逐步了解它的作用:

    whatsIt(347)
    - is 347 > 10? yes
    -- whatsIt(34)
    --- is 34 > 10? yes
    ---- whatsIt(3)
    ----- is 3 > 10? no
    ----- print 3 % 10 (-> 3)
    --- print 34 % 10 (-> 4)
    - print (347 % 10) (-> 7)
    

    【讨论】:

      【解决方案2】:

      如果你想打印 3,使用这个

      public static void whatsIt(int n){ 
          if (n>10) whatsIt(n/10);
          else System.out.print(n%10);
      }
      

      您的代码如下:

      1. whatsit(347):调用 whatsit(34),然后打印 7,然后返回
      2. whatsit(34):调用 whatsit(3),然后打印 4,然后返回。
      3. whatsit(3):打印 3,然后返回。

      【讨论】:

        【解决方案3】:

        方法在调用自己时不会停止。当子调用完成后,控制流返回到“原始”方法调用并继续到下一行,即打印,从而打印原始编号。

        【讨论】:

          【解决方案4】:

          试试这个:

          public static void whatsIt(int n){
          if (n>10)
              whatsIt(n/10);
          else
              System.out.print(n%10);
          }
          

          因为如果 n

          在您的初始代码中,每个递归调用都打印 n%10。因此,第一个调用 whatsIt(347) 打印 7 (347 % 10),第二个调用打印 4 (34 % 10),第三个调用打印 3 (3 % 10)。这些将在回溯期间以相反的顺序打印,从而为您提供 347。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-07-23
            • 1970-01-01
            • 1970-01-01
            • 2015-02-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多