逆转字符串中的递归方法问题

时间:2018-12-11 16:44:53

标签: java string recursion reverse

当我使用递归方法反转字符串时,它给了我stackOverflow错误。

public class ReverseString {

    public static void main(String[] args) {
        String str = "Juhi";
        System.out.println(recursiveString(str));
    }

    static String recursiveString(String str) {     
        return !str.equals("") ? recursiveString(str.substring(1) + str.charAt(0)) : str;

    }
}

3 个答案:

答案 0 :(得分:3)

这应该可以解决问题:

static String recursiveString(String str) {
    return !str.equals("") ? recursiveString(str.substring(1)) + str.charAt(0) : str;
}

在您的代码中,您并没有减少字符串参数的长度,它始终是相同的输入,因此基本上它正在进入无限循环。如果我们在递归调用之后移动串联部分,则每个递归调用的字符串都会更短,直到它为空,这表明递归结束。

答案 1 :(得分:0)

public static void main(String[] args) {
        String str = "Juhi";
        System.out.println(recursiveString(str));
    }

    static String recursiveString(String str) {
        return !str.equals("") ? recursiveString(str.substring(1) ) + str.charAt(0): str;

    }
}

答案 2 :(得分:0)

可识别Unicode的递归反向

尽管其他答案都向您显示了错误的出处以及如何编写适用于基本Unicode字符的递归字符串反向算法,但它们为supplementary Unicode characters产生了错误的结果。以下方法适用于所有Unicode字符:

static String recursiveReverse(String str) {
    if (str.isEmpty())
        return "";
    int offsetToSecondCodePoint = str.offsetByCodePoints(0,1);
    return recursiveReverse(str.substring(offsetToSecondCodePoint))
            + str.substring(0, offsetToSecondCodePoint);
}