3

皆さん、今晩は、

私のクラスが再帰についてやっている宿題について簡単な質問があります。アイデアは、このハノイの塔プログラムがあり、5 から 25 の数字と、そのサイズの塔を解くのに何手かかるかを表示する表を作成するメインを作成する必要があるということです。たとえば、

5 ---- 31手

6 ---- 63手

等...

TowersOfHanoi クラスは各動きを出力するように設定されているため、これを行うのに少し問題があります。それを取り除くべきではないと思いますが、よくわかりません。

ここに TowersOfHanoi クラスがあります

public class TowersOfHanoi {
    private int totalDisks;
    private int count;

    public TowersOfHanoi(int disks) {
        totalDisks = disks;
        count = 0;
    }

    public void solve() {
        moveTower (totalDisks,1,3,2);
    }

    private void moveTower(int numDisks, int start, int end, int temp) {
        if (numDisks ==1) {
            moveOneDisk(start,end);
        }
        else {
            moveTower (numDisks-1, start, temp, end);
            moveOneDisk (start, end);
            moveTower (numDisks-1, temp, end, start);
        }
    }

    private void moveOneDisk(int start, int end) {
        count = count+1;
        System.out.println("Move one disk from "+start+" to "+end+" - Move "+count);
    }
}

ここで、すべてのタワーのすべての動きを出力せずにそのテーブルを作成するメインを作成する必要がありますが、その方法がよくわかりません。どんな助けでも大歓迎です

4

3 に答える 3

2

TowersOfHanoiパズルを解くディスクごとに、クラスのオブジェクトが 1 つ必要です。このために、これらのオブジェクトにmain異なる引数 (5 から 25 まで) を渡すことによって、メソッドでこれらのオブジェクトを作成します。オブジェクトが構築されたら、solveメソッドを呼び出すだけです。

これは宿題とタグ付けされているので、実装はあなたに任せます。

于 2012-04-26T06:10:14.817 に答える
0

moveOneDisk の print ステートメントを削除してから、main で再帰メソッドを呼び出した後、count を出力する print ステートメントを記述します。

private void moveOneDisk(int start, int end) {
    count = count+1;
    //System.out.println("Move one disk from "+start+" to "+end+" - Move "+count);
}

public static void main(){
TowersOfHanoi tower = TowersOfHanoi(5);
tower.solve();
system.out.print(tower.count);
}//end of main

moveOneDisk の print ステートメントを削除すると、すべての移動が報告されるわけではありませんが、カウントは増加します。次に、クラス メンバー数を使用してテーブルを作成するときに必要な変数を割り当てることができます。この場合、tower.count

于 2012-05-03T02:09:33.883 に答える