仔細(xì)看一下 5-7行調(diào)用 move 時(shí)候的參數(shù)順序, 不是你說的那樣沒有變:
創(chuàng)新互聯(lián)公司致力于做網(wǎng)站、成都網(wǎng)站制作,成都網(wǎng)站設(shè)計(jì),集團(tuán)網(wǎng)站建設(shè)等服務(wù)標(biāo)準(zhǔn)化,推過標(biāo)準(zhǔn)化降低中小企業(yè)的建站的成本,并持續(xù)提升建站的定制化服務(wù)水平進(jìn)行質(zhì)量交付,讓企業(yè)網(wǎng)站從市場競爭中脫穎而出。 選擇創(chuàng)新互聯(lián)公司,就選擇了安全、穩(wěn)定、美觀的網(wǎng)站建設(shè)服務(wù)!
#5 的含義是將 A 上的前 n-1 個(gè)移動(dòng)到 B
#6 : 將 A 最后一個(gè)移動(dòng)到 C
#7: 將 B 上的 n-1 (即#5 從 A 移動(dòng)過來的 n-1) 個(gè)移動(dòng)到 C
方案1:命令窗口運(yùn)行文件方式
s=0
def?move(n,a,b,c):
global?s
if?n==1:
s=s+1
print(a,'--',c)
return?
move(n-1,a,c,b)
move(1,a,b,c)
move(n-1,b,a,c)
n?=?int(input('num:?'))
move(n,'A','B','C')
print('total:?%s'%s)
方案2:交互模式(建立函數(shù)文件jichu.py,在交互窗口調(diào)用文件中函數(shù)move)
s=0
def?move(n,a,b,c):
global?s
if?n==1:
s=s+1
print(a,'--',c,'\t%s'?%?s)
return?
move(n-1,a,c,b)
move(1,a,b,c)
move(n-1,b,a,c)
move(n, A, B) 就表示把第n個(gè)餅從A柱移到B柱, 其中step是個(gè)全局變量,用來記錄移動(dòng)的次數(shù)。
hanoi(n, A, B, C) 就是你所問的實(shí)現(xiàn)遞歸的函數(shù), 表示把n個(gè)餅從A柱通過B柱移到C柱。
其中 n==1 是遞歸的最基本的情況, 如果只有一個(gè)餅就直接移到目標(biāo)柱子即可。
不然呢我們就先把最上面n-1個(gè)餅從A通過C移到B,注意這里移到的是B柱哦~, 然后把第n塊餅移到C柱,再重新把之前移到B柱上的n-1個(gè)餅通過A移動(dòng)到C。
整個(gè)過程挺直白的,想通了就明白了
Solves the Towers of Hanoi problem on n discs. The discs are labeled
* in increasing order of size from 1 to n and the poles are labeled
* A, B, and C.
*
* % java Hanoi 3
* Move disc 1 from A to C
* Move disc 2 from A to B
* Move disc 1 from C to B
* Move disc 3 from A to C
* Move disc 1 from B to A
* Move disc 2 from B to C
* Move disc 1 from A to C
以上為模擬結(jié)果,從結(jié)果中找遞歸規(guī)律,你的疑點(diǎn)也能得到解決
遞歸方法有些時(shí)候是不太好理解,不過遞歸的意義就是把解決問題n變成解決n-1的問題,最終變成解決1個(gè)問題。
假設(shè)有n個(gè)盤子,從上到下依次編號(hào),最下面的盤子編號(hào)是大寫的N。托盤分別是x,y,z。要把所有盤子從x移動(dòng)到z。
前面幾行代碼就不解釋了,很容易理解。
第五行,如果只有一個(gè)盤子,就直接從x移動(dòng)到z。
第七行,如果不只一個(gè)盤子,先把上面n-1個(gè)盤子從x移動(dòng)到y(tǒng)。
第八行,再把N號(hào)盤子從x移動(dòng)到z。
第九行,再把剛才那n-1個(gè)盤子從y移動(dòng)到z。
至于那n-1個(gè)盤子是怎么移動(dòng)的,再次調(diào)用這個(gè)函數(shù),把問題變成n-2個(gè)盤子加1個(gè)盤子的問題。
解漢諾塔最簡單的做法就是遞歸:
類似如何將大象裝進(jìn)冰箱:1)將冰箱門打開;2)把大大象放進(jìn)去;3)把冰箱門關(guān)上……
我們將所有的盤都在同一個(gè)桿上從大到小排列視為【完美狀態(tài)】,那么,目標(biāo)就是將最大盤片為n的完美狀態(tài)從a桿移到b桿,套用裝大象的思路,這個(gè)問題同樣是三步:
1)把n-1的完美狀態(tài)移到另一個(gè)桿上;
2)把n移到目標(biāo)桿上;
3)把n-1的完美狀態(tài)移到目標(biāo)桿上。
如下:
分享題目:漢若塔函數(shù)python,編寫函數(shù)實(shí)現(xiàn)漢諾塔
文章出自:http://jinyejixie.com/article38/dsecdpp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、手機(jī)網(wǎng)站建設(shè)、建站公司、網(wǎng)站收錄、網(wǎng)站維護(hù)、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)