Java递归实现字符串组合时如何正确截断最终结果?
问题分析与解决
你的核心问题在于递归逻辑错误:每次递归都拼接first + " " + second,导致最终结果是first second重复n次,而非预期的交替出现n个元素。通过截断长度一半来修正的方法完全不可行,因为字符串长度与n并非简单的倍数关系,且会破坏完整单词。
正确的递归实现
根据需求,当输入n时,结果是交替排列的n个元素:第1、3、5...位为first,第2、4、6...位为second,元素间用空格分隔(例如n=3时输出Good Morning Good)。以下是两种可行的递归实现:
实现方式一:逐位累加
public static String combine(String first, String second, int n) { if (n <= 0) { return ""; } if (n == 1) { return first; } // 先获取n-1个元素的结果,再根据n的奇偶添加对应元素 String prevResult = combine(first, second, n - 1); return prevResult + " " + (n % 2 == 0 ? second : first); }
实现方式二:成对拼接
public static String combine(String first, String second, int n) { if (n <= 0) { return ""; } if (n == 1) { return first; } String pair = first + " " + second; if (n == 2) { return pair; } // 拼接一对元素后,递归处理剩余n-2个元素 return pair + " " + combine(first, second, n - 2); }
测试验证
- 输入
("Good", "Morning", 3)时,两种实现都会返回"Good Morning Good",符合预期。 - 输入
("A", "B", 2)返回"A B",输入("X", "Y", 1)返回"X",均满足需求。
内容的提问来源于stack exchange,提问作者Cinnabon
相关产品推荐
相关产品推荐

