注: 再帰的な解決策を理解しています。しかし、コードの実行の段階をたどることができないため、コードがどのようにそれを達成しているかわかりません。
ハノイの塔の再帰ループを理解するのに苦労しています。手順がどのように動作しているかを確認するためにさまざまな戦術をコメントして試してみましたが、ループがどのように動作しているか、リングがどのように向けられているかを把握できないようです.
def move(rings, from, destination, other)
if rings == 1
ring = from.pop
p "Move ring #{ring} from #{from} to #{destination}"
destination.push ring
else
move(rings-1, from, other, destination)
move(1, from, destination, other)
move(rings-1, other, destination, from)
end
end
出力は次のとおりです。
"Move ring 1 from a to c"
"Move ring 2 from a to b"
"Move ring 1 from c to b"
"Move ring 3 from a to c"
"Move ring 1 from b to a"
"Move ring 2 from b to c"
"Move ring 1 from a to c"
さまざまな説明を見てきましたが、ループがどのように実行されているかを説明しているものはありません。たとえば、上記のように、リングが偶数の場合、最初のステップでリング 1 が a から b に配置されるのに対し、すべての奇数のリングでは a から c に配置される理由がわかりません。
ソリューションの背後にあるロジックを理解しています。補助ペグを使用しているときに n 個のリングを目的地に移動するには、最初に n-1 個のリングを補助ペグに移動し、次に n 番目のリングを目的地に移動して繰り返す必要があります。最初の手順をもう一度。しかし、配置の方向がどのように変化しているかはわかりません。たとえば、上記の move メソッドの呼び出しが c から b に言及していないように見える場合、ブロックが c から b に移動する方法がわかりません。
お時間を割いてご協力いただき、ありがとうございました。
また、Ruby でコード実行のプロセスを追跡するのに役立つ提案があれば、お知らせください。物事がどのように実行されているかわからないインスタンスをトラブルシューティングする方法について、あなたの洞察を聞きたいです。
あなたの答えを聞きたいです:)