0

我正在研究递归代码以打印输入序列的所有可能的输出字符串。为简化起见,我将缩短问题。我有一个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. 有人可以指出我的错误吗?

4

1 回答 1

3

问题是您在这里进行后增量:

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

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

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

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

于 2012-04-25T15:20:52.493 回答