赞
踩
2022.3.17
2022.11.15 增加次数计算
从左到右有A、B、C三根柱子,其中A柱子上面有从小叠到大的n个圆盘,现要求将A柱子上的圆盘移到C柱子上去,期间只有一个原则:一次只能移到一个盘子且大盘子不能在小盘子上面,求移动的步骤和移动的次数。【图 n=3】
A
柱有放好的盘子,移到C
放好创建个汉罗塔函数hanoi(A,B,C,n)
n
是几个盘子,A
,B
,C
分别表示柱子
当 n=1
时,只有一个盘子 那个直接 A柱内容
移到 C柱内容
我们看函数,四个参数,其实就是第1个参数移到第3个参数(点非常重要,后面会用到
)
def hanoi(A, B, C, n):
if n == 1:
print(A, '->', C)
3. 当n>1时
,我们发现A柱初始状态下,上面是n-1的汉罗塔
初始状态+最下面的大盘
我们 把上面n-1个汉罗塔看成整体 ,只需做下面三步:
C柱
我们先把 n-1汉罗塔 移到B柱子
A
移到 C
B柱
n-1汉罗塔 移到 C
def hanoi(A, B, C, n):
if n == 1:
print(A, '->', C)
eles:
#将A柱中n-1汉罗塔 移到B住
hanoi(A,C,B,n-1)
# 将A中最大的地盘 移到C,没有移动汉罗塔,所以直接输出
print(A, '->', C)
# 将B柱中n-1汉罗塔看成整体 移到C柱
hanoi(B,A,C,n-1)
汉罗塔内部顺序写法,根据的是:
def hanoi(A, B, C, n):
if n == 1:
print(A, '->', C)
else:
hanoi(A,C,B,n-1)
print(A, '->', C)
hanoi(B,A,C,n-1)
hanoi('A','B','C',4)
A -> B
A -> C
B -> C
A -> B
C -> A
C -> B
A -> B
A -> C
B -> C
B -> A
C -> A
B -> C
A -> B
A -> C
B -> C
def hanoi(A, B, C, n):
time = 0
if n == 1:
print(A, '->', C)
time += 1
else:
time +=hanoi(A,C,B,n-1)
print(A, '->', C)
time += 1
time +=hanoi(B,A,C,n-1)
return(time)
hanoi('A','B','C',4)
global
time = 0
def hanoi(A, B, C, n):
global time
if n == 1:
print(A, '->', C)
time += 1
else:
hanoi(A,C,B,n-1)
print(A, '->', C)
time += 1
hanoi(B,A,C,n-1)
hanoi('A','B','C',4)
print(time)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。