哪种递归方法更好,为什么选择整数的倒数?

问题描述

|
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);
}
要么
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);  
}
    

解决方法

        绝对不是最后一个。将状态保持变量放在静态字段中只会带来麻烦。并不是说您必须为并发而设计,但是例如,如果您有多个线程在运行此代码,则共享的
reverseNumber
字段将完全破坏一切。 我看不出第一和第二之间有什么区别。 (从字面上看,它们看起来与我相同。) 如果您的目标是通过为第二个参数设置默认值(
reverseNumber
)来简化调用约定,则只需重载您的方法即可:
public static int recursiveReverse(int number) {
    return recursiveReverse(number,0);
}

private static int recursiveReverse(int number,int reverseNumber) {
    // your code goes here
}
    ,        我看不出第一个示例和第二个示例之间的任何区别 但是在第三个示例中使用静态变量是危险的(您需要每次都重置它,并且它不是线程安全的)     ,        我认为条件(n <= 0)最后增加了额外的0。比较10(n <= 10)会返回正确反转的整数
public int rev(int n){
    if(n <= 10) {
        return n;
    }
    return Integer.parseInt(\"\" + (n % 10) + rev(n / 10));
}
    ,        进行以下操作:
public int rev(int n){
    if(n <= 0) {
        return n;
    }
    return Integer.parseInt(\"\" + (n % 10) + rev(n / 10));
}
这样,您就不需要临时变量来保存状态,并且它满足返回类型。 希望这可以帮助!! :)     ,        这是两行代码中最短/最简单的方法:
public static int reverseNumber(int n) 
{
    System.out.println(n % 10);
    return (n/10 > 0) ? reverseNumber(n/10) : n;
}