递归地拼出一个单词

Bre*_*dan 3 java recursion combinatorics

我得到了这个:

编写一个递归程序,给定一个没有空格的字符串,将其分解为字符串的每个可能的分段为"单词".也就是说,打印出每个可能的字符串版本,并在其中插入空格.给出分段字符串的顺序无关紧要,但必须给出所有可能的分段,不重复.

如果有人可以提供帮助,我将完全失去如何开始.

输出应该如下所示:

 Enter a string: ABCD

 ABCD
 A BCD
 A B CD
 A B C D
 A BC D
 AB CD
 AB C D
 ABC D
Run Code Online (Sandbox Code Playgroud)

Dam*_*ver 5

您已经给出了输出的模式(如,按照产生这些输出的顺序).考虑2-5的输出有什么共同点:

A BCD
A B CD
A B C D
A BC D
Run Code Online (Sandbox Code Playgroud)

因此,看起来您的函数将打印其input(ABCD),然后它将第一个字母作为前缀(A),并递归地查找其余字母(BCD)的所有组合.这将暗示函数的实际定义有两个参数 - 一个已经扩展的前缀,以及一组枚举组合的剩余字母.

用一个字母完成后,我们将另一个字母移到这个前缀(AB)中,然后递归地找到剩余字母(CD)的所有组合,以产生下一组输出:

AB CD
AB C D
Run Code Online (Sandbox Code Playgroud)


Pét*_*rök 5

我会给你提示帮助:

想想如何递归地解决这个问题.基本上,这可以通过"分而治之"的变化来解决.对于给定长度为n的字符串,有n-1个位置可以插入分隔符空格.

因此,如果您有一个长度为2的字符串,则有一个位置可以插入分隔符,还有两个变体:是否插入分隔符.

如果您有一个长度为3的字符串,则您在2个位置有2个选项.因此,该函数可以创建一个首先插入空格的字符串,并使用字符串的未处理尾部递归调用自身,以生成该子字符串的所有变体.然后创建另一个前缀字符串,其中第一个位置没有插入空格,并再次使用字符串的其余部分调用自身.

对于每个递归调用,它需要传递已经生成的字符串前缀以及字符串的剩余未处理尾部.