递归以反向顺序打印整数

时间:2013-10-15 15:36:26

标签: java recursion integer

我只是学习递归而我是以相反的顺序打印输入数组(不使用任何String或Character方法)。

例如4295将显示为5924

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

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

如何修复它以返回打印整个整数?

5 个答案:

答案 0 :(得分:11)

递归的基础是从内部再次调用相同的方法,这是缺失的。

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

这应解决问题。

答案 1 :(得分:2)

正如其他人已经指出的那样:为了使您的方法有效,请将您的if更改为while

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

从您的描述来看,这里似乎存在一个重要的误解:您正在做的是迭代不是递归。为了快速了解迭代和递归之间的差异,请查看here

答案 2 :(得分: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 / 10上调用method_c,除非n为0,否则将使函数递归。

答案 3 :(得分: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

答案 4 :(得分:0)

如果您将if更改为while将获得所需的结果,但它将是迭代的,而不是递归的。在检查到满足基本停止条件后,递归方法将调用自身。你可能想要写一些类似的东西:

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