思路:三個柱子x,y,z,有n個盤子在x上,要將n個盤子搬到z上,首先要將n-1個盤子搬到y上,再將第n個盤子從x搬到z上,再將y上的n-1個盤子搬到z上
次數:1個盤子:要搬1次
2個盤子:要搬3次
3個盤子:要搬7次..
.n個盤子:要搬2f(n-1)+1次
def
hannota(n
,x,y
,z):
ifn==
1:printx,
'-->',z
else:
hannota(n-
1,x,
z,y)
#將1個盤子從x移動到y上
printx,
'-->',z
#將疊底下的盤子從x移動到z上
hannota(n-
1,y,
x,z)
#再將y上的n-
1個盤子移動到z上n=
int(
input
("請輸入漢諾塔的層數:"))
次數:
def
count_hannota(n
):ifn
==1:
return
nelse:
return(2
*count_hannota(n-
1)+1
)
如果將漢諾塔上的每個盤子由上往下依次標個序號1,2,3,…,n-1,n
def
hannota(n
,x,y
,z,i
):ifn
==1:
printx,
'-->',z
,ielse:
hannota(n-
1,x,
z,y,
i-1)#
將1個盤子從x移動到y上
printx,
'-->',z
,i#將疊底下的盤子從x移動到z上
hannota(n-
1,y,
x,z,
i-1)#
再將y上的n-
1個盤子移動到z上
#搬運次數:
defcount_hannota(n
):ifn
==1:
return
nelse:
return(2
*count_hannota(n-
1)+1
)n=int
(input
("請輸入漢諾塔的層數:"))
i=nt
=count_hannota(n
)print
("過程: 盤子序號 "
)hannota(n
,'x'
,'y'
,'z',i
)print
("總共需要搬運%d次"%t
python 漢諾塔 Python漢諾塔
import turtle class stack def init self self.items def isempty self return len self.items 0 def push self,item def pop self return self.items.pop def ...
漢諾塔程式
include stdio.h void move char x,char y 自定義move函式,用來將塊從起始柱子x移動到目標柱子y,這裡的x,y為形參,不代表具體哪根柱子 void hannuota int n,char a,char b,char c 自定義hannuota函式,這裡的a,b...
基於python解決漢諾塔問題(遞迴)
剛剛看了python的遞迴,實現了一下漢諾塔問題求解。mark一下,txtx。漢諾塔問題 解題思路 把n個圓盤看作兩部分 最底部的乙個圓盤和上面的n 1個圓盤 二分類 先將n 1個圓盤移到b柱 中轉 再將最底下的乙個圓盤移到c柱 目標 最後將n 1個圓盤移到c柱 目標 然後我們對n 1個圓盤做相似過...