pythonでハノイの塔の再帰コードはどのように書くか
再帰を利用してハノイの塔問題を解くことができます。以下は Python のサンプルコードです:
def hanoi(n, source, target, auxiliary):
if n > 0:
# 先将前 n-1 个盘子从源柱子移动到辅助柱子
hanoi(n-1, source, auxiliary, target)
# 将最底下的盘子从源柱子移动到目标柱子
print(f"Move disk {n} from {source} to {target}")
# 再将之前移动到辅助柱子的 n-1 个盘子移动到目标柱子
hanoi(n-1, auxiliary, target, source)
# 测试代码
hanoi(3, "A", "C", "B")
コードにおいてhanoi関数は再帰関数で、n 枚の円盤、始点の棒のポール、目的地の棒のポール、中継地の棒のポールを含む4つの引数を取ります。まず最初に、円盤の数がゼロよりも大きいかどうかをチェックし、大きければ再帰が行われます。
再帰的过程には3つのステップが含まれます。
- ハノイ(n-1, source, auxiliary, target)
- 一番下の皿を始めの棒から、終点の棒に動かします。このステップで必要なのは、移動を1回だけ行うことです。
- ハノイ(n-1、補助、目標、源)
ハノイ関数を呼び出して正しいパラメータを渡すことでコードをテストできます。上のサンプルコードでは、3枚のディスクを軸Aから軸Cに軸Bを補助として使用して移動します。プログラムは各ステップでの移動内容を出力します。