python中汉诺塔如何理解_python汉诺塔问题的递归理解
一、問題背景
漢諾塔問題是源于印度一個古老傳說。
源于印度一個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。并且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤。
簡單來說目的就是要我們把盤子按照規則從A移到C
二、思路
此處我用遞歸的思想理解漢諾塔問題。遞歸的思想容易理解,但是運用在代碼上的算法并不是解決漢諾塔問題的最佳算法。
我們初定有n個盤子,把三個盤子從左到右分別標為A,B,C。
我們先思考,如果只有一個盤子放在A柱,要移動到C,應該A-->C
(1)首先根據大的盤子在下,小的盤子在上的目標,我們倒著想,想到要移動A最下面的盤子。要把A最下面的盤子移動到C,首先要把前n-1個盤子移動到B
(2)然后可以把第n盤從A移動到C了
之后我們把B柱位置與A柱位置互換,我們可以發現忽略C中的盤子后,問題變為了n-1個盤子的漢諾塔問題
之后我們可以重復以上步驟,直至問題化為單一的盤子移動(從A到C)。
三、python代碼
此處我編寫了一個hanoi函數和move函數去顯示n個盤子的運動軌跡
n=eval(input())
def move(p,q):
print(p,'-->',q)
def hanoi(n,a,b,c):
if n==1:
move(a,c)
else:
hanoi(n-1,a,c,b)
move(a,c)
hanoi(n-1,b,a,c)
hanoi(n,'A','B','C')
四、效果
5個盤子的移動軌跡顯示
總結
以上是生活随笔為你收集整理的python中汉诺塔如何理解_python汉诺塔问题的递归理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RFID资产管理系统高效解决资产管理出现
- 下一篇: Python -- 图像的手绘风格