谁能告诉我这段代码是如何工作的?

问题描述 投票:-1回答:1

我不知道此递归问题的工作原理。

我迷路后只能到达印有“蓝绿色”的地步。

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");
    }
}

输出正确,但无法弄清楚它是怎么来的。

java recursion anagram
1个回答
0
投票

“ prefix”是到目前为止构建的结果,“ word”是添加前缀的字母池。

终止情况是“单词”中没有字母,因此结果(“前缀”)被打印并且递归停止。

有三种递归方法:

  1. 将“单词”的第一个字母添加到“前缀”,然后与其余的“单词”一起递归
  2. 从“单词”的第二个字母到最后一个第二个字母的迭代,以“已删除”的字母递归(通过将所删除字母的两边的子串加在一起)
  3. 将“单词”的最后一个字母添加到“前缀”,并使用“单词”的前面的字母递归进行

该代码是上述说明的Java实现。

© www.soinside.com 2019 - 2024. All rights reserved.