我正在编写递归代码来打印输入序列的所有可能的输出字符串。为了简单起见,我将缩短问题。我有一个 String[] 数组。我想打印从 [0]
到 [N]
的所有可能的单词组合,一次只考虑 String
中的一个字符。 示例:String[] a = {"abc", "def", "ghi"}
我应该打印adg, adh, adi, aeg..等等
这是我的递归代码:
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
时,我的代码陷入了无限循环。有人可以指出我的错误吗?
最佳答案
问题是您在这里进行后递增:
printLetters(list, count++, result + list[count].charAt(i) + "");
因此,首先发生递归调用,然后发生增量,这实际上意味着您不断调用具有相同 count
值的方法。改用这个:
printLetters(list, count + 1, result + list[count].charAt(i) + "");
您确定要增加计数
吗?因为当递归调用返回时,您在“父方法”中也会有 count + 1
,我认为这不是您所需要的。
关于java - 打印给定序列的字符组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10318633/