ハノイの塔のために、A - Bタワーからディスクを移動させ、余分なタワーをCとする次の作業プログラムがあります。 :自分のプログラムを使ってハノイのアルゴリズムを理解しようとしています
A--B--C //fromTower, toTower,auxTower
A--C--B //fromTower, auxTower, toTower
C--B--A //auxTower, toTower, fromTower
:あなたは私のプログラムでは再帰呼び出しから見ることができるように、私は三つの可能な電話を持っている
public static void moveDisks(
int n,
char fromTower,
char toTower,
char auxTower)
{
if (n == 1) // Stopping condition
System.out.println(
"Move disk " + n + " from " + fromTower + " to " + toTower);
else
{
moveDisks(n - 1, fromTower, auxTower, toTower);
System.out.println(
"Move disk " + n + " from " + fromTower + " to " + toTower);
moveDisks(n - 1, auxTower, toTower, fromTower);
}
}
}
:moveDisks(n, 'A', 'B', 'C');
私は次のアルゴリズムを使用して行動を起こすたびに出力します
しかし、私は3
ディスクに対して、次のプリントアウトを取得しています:
The moves are:
Move disk 1 from A to B
Move disk 2 from A to C
Move disk 1 from B to C
Move disk 3 from A to B
Move disk 1 from C to A
Move disk 2 from C to B
Move disk 1 from A to B
私は私のプログラムが正しいことを知っているが、私はこのような関数/メソッドを作ったことがないので、私は本当にそれがB--C
とC--A
呼び出しをやっているか届きませんあなたが私のA--B--C
、fromTower, toTower,auxTower
モデルを使って、この再帰的な方法が3つのディスクに関してどのように動作しているかを見れば分かると思います。
デバッガで実行して、何が起きているのかを正確に確認します。 – pjs
既に実行中だと言っているデバッグ。すでに実行中のプログラムをどのようにデバッグできますか?@pjs –
どのIDEを使用しているのか分からないので、私はそれについて助言することはできません。ほとんどのデバッガには、ブレークポイントを設定するメカニズムと、変数を検査する機能を持つコードを1行ずつ進める方法があります。あなたのIDEでこれを行う詳細については、あなた自身で検討しています。 – pjs