-3

開始単語、目標単語、および使用が許可されている単語の文字列配列が与えられます。再帰を使用して、指定された文字列配列から少なくとも 1 つの単語を使用して、最初の単語と最後の単語の間に単語ラダーを構築できるかどうかを返すことになっています。

再帰は私にとって非常に難しいので、この問題にどのようにアプローチするかについて本当に迷ったり混乱したりしています。

4

3 に答える 3

0

再帰は、それ自体の内部から関数を呼び出すことにあります。常に終了条件を指定する必要があります (そうしないと、スタック オーバーフローが発生します)。残りはニーズによって異なります。

class Myclass {
    public static int doSomething(int a) {
        if (a < 10) {
             doSomething(a + 1);
        }
    }

    public static void main(String [] args) {
        System.out.printl(Myclass.doSomething(0));
    }
}
于 2013-02-23T21:43:27.287 に答える
0

単語ごとに、考えられるすべての兄弟のリストにリンクします。次に、可能なすべてのはしごのツリーの構築を開始します...最初から始めます。ゴールにたどり着いた場合は、2 つの間のパスを返します。ツリーをナビゲートする際に再帰を使用できます。

于 2013-02-23T21:44:19.460 に答える
0

@ user2103249 が言ったこと。このような場合、再帰ルーチンはおそらく成功したパスを返すはずです。次の順序で何か:

public String[] canFindPath(String[] pathSoFar) {
    for (characters in last word of pathSoFar) {
        for (all possible modifications of the character) {
            if (modifying the character produces a word in the word list but not already in pathSoFar) {
                Create new pathSoFar copy, with the one additional word;
                if (additionalWord == goalWord) {
                    return newPathSoFar;
                }
                String[] result = canFindPath(newPathSofar);
                if (result != null) return result;
             }
         }
     }
     return null;
}

十数の異なるアプローチがありますが。

最初に、単語リスト内の単語 A から単語 B への可能な遷移のマップを作成すると、各ステップでそれぞれを検索するのではなく、可能性をすばやく索引付けできるため、処理が高速化されます。

于 2013-02-23T21:56:31.983 に答える