java - 尝试在java中使用递归查找字符串的反向时出现StackOverflowError

标签 java recursion

我正在尝试使用递归来查找字符串的反转,但是当我运行代码时出现堆栈溢出错误。我是递归新手,所以我不确定需要做什么来修复它。

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

最佳答案

这不是递归应该如何工作的,因为您只是一遍又一遍地传递相同的字符串。您可以使用递归,但有两种方法可以解决您的问题。

  1. 获取最后一个字符并使用没有最后一个字符的字符串调用该方法,如下所示:

    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/

相关文章:

java - 如何比较类文件

java - 将 JSON 子对象属性绑定(bind)到 Jackson 中的 Java 对象字段

python - 递归修改字典

java - 编写 "Rat in a maze"问题的递归解决方案很困难

java - 为什么我会收到 NoSuchElementException?

javascript - 生成图的每种拓扑排序

java - 结合 Realm 和 SQLite。?

java - 如何在 Java 中计算某人的年龄?

java - Google Places Details 搜索 System.err

java - 随机数生成器生成重复项