0

入力シーケンスのすべての可能な出力文字列を出力する再帰コードに取り組んでいました。簡単にするために、問題を短くします。String[]配列があります。[0]単語の可能なすべての組み合わせを、一度に1文字だけを[N]考慮して印刷したいと思いますStringString[] 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 に答える