-3

だから私は自分のコードを投稿しました。しかし、この質問は、再帰とは何かを正確に理解するのに役立つだけです。基本ケース再帰ケースが必要であることを理解しています。私の課題は、ユーザーからの入力を読み取り、その順序を逆にすることです。「animals」は「slamina」になります。私の基本的なケースは、ユーザーが空の行を入力した場合です(これは許可されています)。私の再帰的なケースでは、入力に文字が含まれている限り、入力を格納するために文字列を使用していますが、どこかで「.charAt[0]」コマンドを使用している可能性がありますか?

この割り当てに使用する必要があるコードを改善するのに役立つ説明を探しています。私はEclipseでJavaを使用しています

4

4 に答える 4

1

再帰は、実行スレッドで自分自身を参照するコードです。再帰コードを書く鍵は、繰り返しパターンを特定し、そのパターンを 1 回だけ記述することです。

あなたの場合、パターンはキャラクターの切り替えです。次の疑似コードを検討してください。

パターン(文字列)
    reverse = (文字列の最初の文字を除くすべて、反転)
              + (最初の文字)

最初の項は同じパターンを使用できます。つまり、次のようになります。

パターン (文字列の最初の文字を除くすべて) 

ただし、これが永久に実行されないようにするために、切り替える文字がなくなったら停止する必要があります (つまり、元に戻せない文字列に遭遇した場合)。

パターン(文字列)
    文字列の長さ < 2 の場合は、文字列を返します
    else reverse = パターン (文字列の最初の文字を除くすべて)
                   + (文字列の最初の文字)
    戻る逆
于 2013-03-14T00:36:16.590 に答える
0

再帰を使用するには、まずパラメーターを調べて、再帰を使用するかどうかを決定する必要がありますパラメータが再帰を使用する必要があることを示唆している場合は、新しいパラメータで再帰を使用する必要があります。それ以外の場合は、結果を返す必要があります。

同じメソッドで再帰を複数回使用できます。

于 2013-03-14T00:26:12.720 に答える
0

この問題について、次のように考えることができます。

  1. 文字列が空の場合は、空の文字列を返します。

  2. それ以外の場合は、文字列の最初の文字を削除し (名前を付けますc)、残りの部分で reverse を呼び出し(名前を付けますcs)、最後に追加cします。

ここにいくつかの疑似コードがあります (これはコンパイルされません。これは単にアイデアを提供するためのものです)。

reverse(String input)
  if (input.isEmpty())
    return input;
  else {
    String c = getFirstCharacterOfString(input);  //write this on your own
    String cs = getAllCharactersButTheFirst(input); //write this on your own
    return reverse(cs) + c;
  }
于 2013-03-14T00:29:37.397 に答える
0

あなたはそれがどのように機能するかを理解したいと思われるので、直接答えようとはしません。そのため、近い再帰関数の例を示します。

以下は、再帰を使用して 1 から 100 までのすべての数値を合計する方法の例です (これは、実行しようとしていることに近いものです)。

int sumAllNumbers(int actualNumber, int limit)
{
   if (actualNumber < limit) return sumAllNumbers(actualNumber + 1, limit) + actualNumber;
   return actualNumber;
}

これがどのように機能するかがわかれば、文字列を逆にする再帰関数を作成する方法を理解できると思います。覚えておかなければならない主なことは、再帰を止める条件が必要だということです。

于 2013-03-14T00:35:58.103 に答える