我不知道此递归问题的工作原理。
我迷路后只能到达印有“蓝绿色”的地步。
class Anagrams {
private static void printAnagramsHelper(String prefix, String word) {
if (word.length() <= 1) {
System.out.println(prefix + word);
} else {
printAnagramsHelper(
prefix + word.charAt(0),
word.substring(1)
);
for (int i = 1; i <= word.length() - 2; i++) {
printAnagramsHelper(
prefix + word.charAt(i),
word.substring(0, i) + word.substring(i + 1)
);
}
printAnagramsHelper(
prefix + word.charAt(word.length() - 1),
word.substring(0, word.length() - 1)
);
}
}
public static void printAnagrams(String word) {
printAnagramsHelper("", word);
}
public static void main(String[] args) {
printAnagrams("teal");
}
}
输出正确,但无法弄清楚它是怎么来的。
“ prefix”是到目前为止构建的结果,“ word”是添加前缀的字母池。
终止情况是“单词”中没有字母,因此结果(“前缀”)被打印并且递归停止。
有三种递归方法:
该代码是上述说明的Java实现。