哪个递归方法更好,为什么对于整数的反转数字?

时间:2011-06-11 17:28:44

标签: java recursion

public static int recursiveReverse(int number, int reversenumber){

    if(number <= 0) {
        return reversenumber;
    }

    reversenumber = reversenumber * 10 + (number % 10);
    number = number/10;

    return recursiveReverse(number, reversenumber);
}

OR

private static int reversenumber = 0;

public static int recursiveReverse(int number){

    if(number <= 0) {
        return reversenumber;
    }

    reversenumber = reversenumber * 10 + (number % 10);
    number = number / 10;

    return recursiveReverse(number);  
}

5 个答案:

答案 0 :(得分:5)

绝对最后一个。将状态保持变量放在静态字段中只是要求麻烦。并不是说您必须设计并发性,但是如果您有多个线程运行此代码,那么共享的reverseNumber字段将完全破坏所有内容。

我认为第一和第二之间没有任何区别。 (从字面上看,它们看起来与我相同。)

如果您的目标是通过为第二个参数(reverseNumber)设置默认值来简化调用约定,那么只需重载您的方法:

public static int recursiveReverse(int number) {
    return recursiveReverse(number, 0);
}

private static int recursiveReverse(int number, int reverseNumber) {
    // your code goes here
}

答案 1 :(得分:2)

我认为第一个和第二个例子之间没有任何区别

但在第三个示例中使用静态变量是危险的(每次都需要重置它并且它不是线程安全的)

答案 2 :(得分:2)

我认为条件(n <= 0)最后会增加0。与10(n <= 10)比较返回正确反转的整数

public int rev(int n){
    if(n <= 10) {
        return n;
    }
    return Integer.parseInt("" + (n % 10) + rev(n / 10));
}

答案 3 :(得分:1)

请使用以下内容:

public int rev(int n){
    if(n <= 0) {
        return n;
    }
    return Integer.parseInt("" + (n % 10) + rev(n / 10));
}

这样,您不需要临时变量来保持状态,并且它满足返回类型。 希望这可以帮助!! :)

答案 4 :(得分:0)

这是两行代码中最短/最简单的方法:

public static int reverseNumber(int n) 
{
    System.out.println(n % 10);
    return (n/10 > 0) ? reverseNumber(n/10) : n;
}