我正在研究递归代码,以便为输入序列打印所有可能的输出字符串。为简化起见,我将缩短问题。我有一个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
时,我的代码进入无限循环。有人可以指出我的错误吗?
答案 0 :(得分:3)
问题是你在这里进行了后续增加:
printLetters(list, count++, result + list[count].charAt(i) + "");
所以递归调用首先发生,然后是递增,这实际上意味着你继续调用具有相同值count
的方法。请改用:
printLetters(list, count + 1, result + list[count].charAt(i) + "");
你确定要增加count
吗?因为当递归调用返回时,“父方法”中也会有count + 1
,我认为这不是你需要的。