1

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

例如4295将显示为5924.

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

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

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

4

5 回答 5

11

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

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

这应该可以解决问题。

于 2013-10-15T15:40:03.803 回答
2

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

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

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

于 2013-10-15T15:49:51.830 回答
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 时除外)将使函数递归。

于 2013-10-15T15:40:42.373 回答
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
于 2013-10-15T15:46:17.357 回答
0

如果您将您的更改if为 awhile将达到预期的结果,但它将是迭代的,而不是递归的。在检查是否满足基本停止条件后,递归方法将调用自身。您可能想要编写如下内容:

public static void method_c(int n) {
    if (n > 0) {
        System.out.println(n % 10);
        method_c(n / 10);
    }
}
于 2013-10-15T15:46:43.400 回答