我正在尝试使用递归来查找字符串的反转,但是当我运行代码时出现堆栈溢出错误。我是递归新手,所以我不确定需要做什么来修复它。
public static String reverse(String string) {
int index = 0;
if(string == null){
return " ";
}
else if(index < string.length()) {
char a;
a = string.charAt(index);
index += 1;
return a + reverse(string);
}
return " ";
}
最佳答案
这不是递归应该如何工作的,因为您只是一遍又一遍地传递相同的字符串。您可以使用递归,但有两种方法可以解决您的问题。
获取最后一个字符并使用没有最后一个字符的字符串调用该方法,如下所示:
public String reverse(final String string) { if (string != null && !string.isEmpty()) { final int length = string.length(); final char character = string.charAt(length - 1)); final String result = reverse(string.substring(0, length - 2)); if (result != null) return String.valueOf(character) + result; return String.valueOf(character); } return null; }
我不应该说我没有测试过这个,但重点是我正在更改传递的字符串,并且有一种机制来检测何时退出调用我自己的方法。
第二种方法是不使用递归来完成此操作,因为您可以通过一些 for 循环等来完成此操作。但为了学习,请检查 1 :P
关于java - 尝试在java中使用递归查找字符串的反向时出现StackOverflowError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29066435/