按顺序打印字符组合

时间:2012-04-25 15:17:51

标签: java recursion stack-overflow

我正在研究递归代码,以便为输入序列打印所有可能的输出字符串。为简化起见,我将缩短问题。我有一个String[]数组。我想从[0][N]打印所有可能的单词组合,一次只考虑String中的一个字符。 示例String[] a = {"abc", "def", "ghi"}我应该打印adg, adh, adi, aeg.. etc 这是我的递归代码:

void printLetters(String[] list, int count, String result)
    {
        if(list == null)
            return;
        if(count > list.length-1)
        {
            System.out.println(result);
            return;
        }
        for(int i = 0; i<list[count].length(); i++)
        {
            printLetters(list, count++, result + list[count].charAt(i) + "");
        }
    }

当我得到StackOverflowError时,我的代码进入无限循环。有人可以指出我的错误吗?

1 个答案:

答案 0 :(得分:3)

问题是你在这里进行了后续增加:

printLetters(list, count++, result + list[count].charAt(i) + "");

所以递归调用首先发生,然后是递增,这实际上意味着你继续调用具有相同值count的方法。请改用:

printLetters(list, count + 1, result + list[count].charAt(i) + "");

你确定要增加count吗?因为当递归调用返回时,“父方法”中也会有count + 1,我认为这不是你需要的。