私は練習問題に取り組んでいて、立ち往生しています。この問題では、2 つの整数 x と y を取り込んで、3 つの移動のいずれかを繰り返し使用して (0,0) から (x,y) までの 2D 平面を移動するためのすべての解を出力するメソッドを作成する必要があります。
- 右に移動 1 (E)
- 上に移動 1 (N)
- 右に 1、上に 1 移動 (NE)
呼び出しの例を次に示します。
- 呼び出し: 旅行 (2, 1)
- 出力: EEN // ENE // E NE // NEE // NE E
次のコードを書きました。
public void travel(int x, int y) {
if (x == 0 && y == 0) {
System.out.println();
} else if (x > 0 && y > 0) {
System.out.print("E ");
travel(x-1, y);
System.out.print("N ");
travel(x, y-1);
System.out.print("NE ");
travel(x-1, y-1);
} else if (x > 0 && y == 0) {
System.out.print("E ");
travel(x-1, y);
} else if (y > 0 && x == 0) {
System.out.print("N ");
travel(x, y-1);
}
}
上記のメソッドを呼び出すと、次のコードが生成されます。
- 呼び出し: 旅行 (2,1);
- 出力: EEN // NE // NE // NEE // NE E
この例の呼び出しでは、E が後続の再帰メソッドが呼び出される前に出力されるため、E を必要とする 3 つの異なるケースで E が 1 回しか出力されないことに問題があることがわかっています。
travel メソッドを呼び出すたびに System.out.print コマンドを添付することで、これを修正したいと思います (これが正しいアプローチであるという確証はありません)。そうすれば、travel メソッドが呼び出されるたびに、毎回最初の文字で結果が出力されます。ただし、メソッドは何も返さないため、print ステートメント内にメソッドを挿入することはできません。これは私が長い間立ち往生しているところです。
ここからどのように進むかについてのアドバイスをいただければ幸いです。