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