2

このハノイの塔の再帰アルゴリズムを理解するのに問題があります。

public class MainClass {
  public static void main(String[] args) {
    int nDisks = 3;
    doTowers(nDisks, 'A', 'B', 'C');
  }

  public static void doTowers(int topN, char from, char inter, char to) {
    if (topN == 1){
      System.out.println("Disk 1 from " + from + " to " + to);
    }else {
      doTowers(topN - 1, from, to, inter);
      System.out.println("Disk " + topN + " from " + from + " to " + to);
      doTowers(topN - 1, inter, from, to);
    }
  }
}

出力は次のとおりです。

Disk 1 from A to C
Disk 2 from A to B
Disk 1 from C to B
Disk 3 from A to C
Disk 1 from B to A
Disk 2 from B to C
Disk 1 from A to C

どうすればよいかわかりません。

Disk 1 from C to B
Disk 3 from A to C
Disk 1 from B to A

誰か説明してもらえますか?

ありがとうございました。

4

2 に答える 2

9

NディスクタワーをペグAからCに移動するには、N-1(最後のディスクを除くすべてのディスク)タワーをAからBに移動し、次にN番目のディスクをAからCに移動し、最後に前に移動したタワーを移動します。 B、BからC。これは、複数のディスクを備えたタワーを移動するたびに適用されます。1つのディスクタワーの場合は、その唯一のディスクを移動するだけです。

于 2012-12-07T22:41:08.040 に答える
0

私が間違っていなければ、1ターンごとに1つのディスクを1つのペグで動かすことができますか?したがって、最初のディスクをaからbに移動し、次にbからcに移動します。それは2手です。次に、ディスク2をaからbに移動できます。これで、ディスク1をcからbに戻すことができます。現在、ディスク3はAにあり、ディスク2と1はaにあります。次に、ディスク1をaからbに移動し、次にcに移動します。いいえ、ディスク3のディスク1と2を正しい順序で取得する必要はありません。したがって、ディスク1をBからAに移動してクリアします。これにより、ディスク2をBからCに配置できます。これで、ディスク1をaからb、次にcに移動して終了します。これで完了です。

それはあなたの質問に答えますか?

于 2012-09-18T19:39:23.647 に答える