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

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

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