为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

呼唤远方 2022-03-10 15:51:14
当我使用递归方法反转字符串时,它给了我 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 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

这应该可以解决问题:


static String recursiveString(String str) {

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

}

在您的代码中,您并没有减少字符串参数的长度,它始终是相同的输入,所以基本上它进入了一个无限循环。如果我们在递归调用之后移动连接部分,那么每次递归调用的字符串都会变短,直到它为空,表示递归结束。


查看完整回答
反对 回复 2022-03-10
?
RISEBY

TA贡献1856条经验 获得超5个赞

一个 Unicode 感知的递归反向


虽然其他答案向您展示了您出错的地方以及如何编写适用于基本 Unicode 字符的递归字符串反转算法,但它们会为补充 Unicode 字符产生错误的结果。以下方法适用于所有 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);

}


查看完整回答
反对 回复 2022-03-10
?
GCT1015

TA贡献1827条经验 获得超4个赞

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;


    }

}


查看完整回答
反对 回复 2022-03-10
  • 3 回答
  • 0 关注
  • 256 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号