为什么这个方法打印出347而不是3?

时间:2015-03-14 01:49:53

标签: java math bluej

假设我有方法

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

我打电话给它(347),为什么打印347而不是3?

4 个答案:

答案 0 :(得分:3)

您可以逐步完成它的工作:

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)

答案 1 :(得分: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,然后返回。

答案 2 :(得分:1)

试试这个:

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

因为如果n <= 10,你不想打印任何东西。

在初始代码中,每个递归调用都打印n%10。因此,第一个呼叫whatsIt(347)打印7(347%10),第二个呼叫打印4(34%10),第三个呼叫打印3(3%10)。这些将在回溯过程中以相反的顺序打印,给你347。

答案 3 :(得分:1)

如果他们自称,方法不会停止。当子调用完成后,控制流程返回到&#34;原始&#34;方法调用并继续到下一行,即打印,从而打印原始数字。