【解決方法】ハノイの塔、再帰


タスク :
helper(h) を使用してソースから宛先 (d) にディスクを移動する

1
2
3
__ __ __
SHD

ルール :
1.一度に移動できるディスクは 1 つだけです。
2.各移動は、スタックの 1 つから上部ディスクを取得し、別のスタックの上に配置することで構成されます。 つまり、スタックの一番上のディスクである場合にのみ、ディスクを移動できます。
3. 小さいディスクの上に大きいディスクを配置することはできません。

プログラムが与える出力:

s から d に 1 を転送する
2 を s から h に転送する
d から h に 1 を転送する -> そこにあってはならない
s から d に 3 を転送する
h から s に 1 を転送 -> 次の行の後に来る必要があり、ルール 2 に違反し、1 の前に 2 を置きます
2 を h から d に転送する
s から d に 1 を転送する -> そこにあるはずがない

私が試したこと:

ビデオチュートリアルは、間違っている上記の出力を与えるこのプログラムを示しています

Java
public class towerOfhanoi {
    public void toh(int n, String src, String helper, String destination) {
        if (n == 0) {
            return;
        }
        toh(n - 1, src, destination, helper);
        System.out.println("transfer " + n + " from" + src + " to" + destination);
            toh(n - 1, helper, src, destination);

    }
    public static void main(String[] args){
        int n=3;
        towerOfhanoi th = new towerOfhanoi();
        th.toh(n,"s","h","d");
    }
}

この出力をコード化できますか:

1 s から d
2 s から h まで
1 d から h まで
3 s から d
1 h から s
2 h から d
1 s から d

解決策 1

コメント

タイトルとURLをコピーしました