2013-10-15 55 views
1

我只是在学习递归,我将以相反顺序打印输入数组(不使用任何字符串或字符方法)。避免以相反的顺序打印整数

例如4295将显示为5924

public static void method_c(int n) { 
    if (n > 0) { 
     System.out.println(n % 10); 
     n /= 10; 
    } 

有这样的代码,但它只返回5,所以我猜通过做递归它不会回去。我认为它可能是n /= 10的位置,但只改变了返回的数字。

我该如何修复它回去打印整个整数?

+4

请注意,这不是递归,只是一个循环。如果您想递归执行此操作,则必须在其内部调用该方法。 – asteri

回答

11

递归的基础是再次从内部调用相同的方法,并且缺少该方法。

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

这应该解决这个问题。

+0

请勿使用minus ...号码292:292号码34:43号码-292:号码-18:号码-334:号码-165:号码288:882号码-405号码:100号码001号码-383:号码-467:号码449:944号码429:924号码-55:号码-33: – barwnikk

+0

@barwnikk,我不认为该解决方案预计会按照您对负数提示的方式工作。当你反转数字时,' - '的位置肯定不会改变。 这是一个明确和正确的答案,我的+1。 – Pankaj

1

递归,你忘记了,你必须调用自身内部的方法,除了在基本情况下,所以你会想:

public static void method_c(int n) { 
    if (n != 0) { 
     Boolean negative = false;  
     if (n<0) { 
      n*=-1; 
      negative = true; 
     }   
     System.out.print(n % 10); 
     method_c(n/10); 
     if (negative) System.out.print("-"); 
    } 
} 

调用上N/method_c 10除了当n为0会使函数递归。

+0

Ehhh ...不要使用minus ...292号码:292号码34:43号码-292号码-18号码-334号码-165号码288号码882号码-405号码100号码001号码-383号码-467号码449号码944号码429号码:924号码-55:号码-33: – barwnikk

+0

这是因为你的情况'if(n> 0)'。我改变了递归代码以考虑负数并在最后打印减号。 – Jsdodgers

+0

如果这是你想要的,你也可以通过移动最后一行来打印前面的减号。 – Jsdodgers

1

它使用负号!

public static void main(String[] args) { 
    for(int i=0; i<15; i++) { 
     int number = (int) (System.nanoTime()%1000)-500; //random number 
     System.out.println(number+" - "+method_c(number)); //printing 
    } 
} 
public static int method_c(int number) { 
    String output = number<0?"-":""; 
    if(number<0)number=-number; 
    while (number > 0) { 
     output += number % 10 + ""; 
     number /= 10; 
    } 
    return Integer.parseInt(output); 
} 

输出示例:

73 - 37 
120 - 21 
-395 - -593 
216 - 612 
-78 - -87 
... more 
0

如果您改变ifwhile会达到预期的结果,但它会反复,不递归。在检查到基本停止条件满足后,递归方法会自行调用。你可能会想要写的东西,如:

public static void method_c(int n) { 
    if (n > 0) { 
     System.out.println(n % 10); 
     method_c(n/10); 
    } 
} 
+0

不要使用minus ...号码292:292号码34:43号码-292:号码-18号码-334号码-165号码288号码882号码-405号码100号码001号码-383号码:号码-467号码:449号码:944号码429号码:924号码-55号码-33号码: – barwnikk

2

正如其他人已经指出:为了使你的方法工作,改变你的ifwhile

public static void method_c(int n) { 
    while (n > 0) { 
     System.out.println(n % 10); 
     n /= 10; 
    } 
} 

从你的描述来看,虽然这里似乎有一个重要的误解:你在做什么是迭代不是递归。要快速浏览迭代和递归之间的差异,请查看here

+0

不能用minus号码工作292号码:292号码34:43号码-292号码-18号码-334号码: number -165:number 288:882 number -405:number 100:001 number -383:number -467:number 449:944 number 429:924 number -55:number -33: – barwnikk

+0

这是因为你错过了问题的要点并没有用递归来实现。看看实际上标记正确的答案......分开地,你的答案补充说,还没有说过什么? – UpAndAdam