用Python遞迴實現漢諾塔問題
阿新 • • 發佈:2019-02-19
問題描述
漢諾塔(又稱河內塔)問題是源於印度一個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤。
問題分析
我曾經遇到過幾次漢諾塔問題,當時覺得想明白了,再次遇到時又要從頭分析,這次使用python的遞迴法真的非常簡單,其實無論盤子有多少,抓住本質的移動規律就可以了。move(n,a,b,c)函式中對應的a表示起始位置,b表示中間位置,c表示最終要移到的位置。整個漢諾塔問題可以分為以下三步:
將n-1個盤子從a移到b
將最後1個盤子從a移到c
- 將n-1個盤子從b移到c
Python程式碼
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
def move(n,a,b,c):
if n==1:
print(a,'-->',c)
else:
move(n-1,a,c,b)
move(1,a,b,c)
move(n-1,b,a,c)
print(move(3,'A','B','C'))