ハノイの塔
ハノイの塔(ハノイのとう、Tower of Hanoi)はパズルの一種。 バラモンの塔または ルーカスタワー(Lucas’ Tower)[1]とも呼ばれる。
ハノイの塔
出典: フリー百科事典『ウィキペディア(Wikipedia)』
再帰で良く出てくるアレです。
説明を読むと納得はできるのですが、いまだに直感的に良く理解することができません。
多分自分には才能がないのだと思います。
Pythonで実装してみました。
コード
# 入力
N = int(input())
# 三本の杭を作る
start = list(range(N, 0, -1))
tmp = []
end = []
def print_piles():
print('----')
print('s: ', start)
print('t: ', tmp)
print('e: ', end)
def hanoi(n, start, end, tmp):
if n <= 0:
return
# n-1 まで全てをstartからtmpに移動。
hanoi(n-1, start, tmp, end)
# n をstartからendに移動。
end.append(start.pop())
print_piles()
# n-1 をtmpからendに移動。
hanoi(n-1, tmp, end, start)
print_piles()
hanoi(N, start, end, tmp)
参考サイト
ただし、棒a、bを0、1とすれば棒の総和 – (棒a + 棒b)で棒cを求めることができるので、
引数にわざわざ作業用の棒を渡さずにすっきり書けます。