java - 打印给定序列的字符组合

标签 java recursion stack-overflow

我正在编写递归代码来打印输入序列的所有可能的输出字符串。为了简单起见,我将缩短问题。我有一个 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/

相关文章:

java - 在没有解析器的情况下从网页中提取除标签之外的所有内容 - 使用扫描仪和正则表达式?

java - 比较Java中的两个字符串

java - WebLogic,选择JDK

java - java中如何按降序打印结果?

list - 递归检查列表中的所有元素是否都是 Prolog 中的某个值

c# - 非无限递归字符串搜索中的 StackOverflowException

java - 使用 JUnit 和 Selenium WebDriver 时浏览器未启动

C - 从递归返回后指针值发生变化

java - OnstartPage 方法中出现 Stackoverflow 错误

c++ - unique_ptr 链表的堆栈溢出