開始単語、目標単語、および使用が許可されている単語の文字列配列が与えられます。再帰を使用して、指定された文字列配列から少なくとも 1 つの単語を使用して、最初の単語と最後の単語の間に単語ラダーを構築できるかどうかを返すことになっています。
再帰は私にとって非常に難しいので、この問題にどのようにアプローチするかについて本当に迷ったり混乱したりしています。
再帰は、それ自体の内部から関数を呼び出すことにあります。常に終了条件を指定する必要があります (そうしないと、スタック オーバーフローが発生します)。残りはニーズによって異なります。
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));
}
}
単語ごとに、考えられるすべての兄弟のリストにリンクします。次に、可能なすべてのはしごのツリーの構築を開始します...最初から始めます。ゴールにたどり着いた場合は、2 つの間のパスを返します。ツリーをナビゲートする際に再帰を使用できます。
@ 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 への可能な遷移のマップを作成すると、各ステップでそれぞれを検索するのではなく、可能性をすばやく索引付けできるため、処理が高速化されます。