如何在Java中通过递归方法实现字符串拷贝(不使用迭代器)
递归实现字符串拷贝方案
你之前触发栈溢出基本是因为没有正确设置递归终止条件,或者substring截取逻辑错误导致递归无法正常退出。递归的核心逻辑分为两部分:基线条件(终止条件)和递归条件,具体实现如下:
public static String buildString(String str) { // 基线条件:字符串为空时直接返回空,终止递归 if (str.isEmpty()) { return ""; } // 取当前字符串首个字符,拼接剩余子串的递归调用结果 return str.charAt(0) + buildString(str.substring(1)); }
逻辑说明
以入参为"abc"为例,递归执行流程如下:
- 第一层调用:
'a' + buildString("bc") - 第二层调用:
'b' + buildString("c") - 第三层调用:
'c' + buildString("") - 触发基线条件:
buildString("")返回空字符串 - 逐层回溯拼接:
"" → "c" → "bc" → "abc",最终返回和原内容完全一致的新字符串。
注意事项
因为Java虚拟机的栈深度存在上限,所以当输入字符串长度特别大的时候依然可能出现栈溢出,这是递归实现的固有特性,常规长度的字符串使用该实现没有问题。
内容的提问来源于stack exchange,提问作者Faith Alone
相关产品推荐
相关产品推荐

