【任务需求】
定义一个函数,用递归的方式模拟汉诺塔问题,三个柱子,分别为A、B、C,其中A柱子上有N个盘子,从小到大编号为1到N,盘子大小不同。现在要将这N个盘子从A柱子移动到C柱子上,但移动的过程必须遵循以下规则:
1.每次只能移动一个盘子;
2.盘子只能放在空柱子或者比自己大的盘子上面;
3.每次只能移动最上面的盘子。
代码展示:
# 模仿汉诺塔
count = 0
def hanoi(num,src,mid,dst): #num代表圆盘数,src,mid,dst,分别代表初始柱,缓冲柱,目标柱
if num < 1:
return
global count # 移动的次数的变量为全局变量
if num == 1:
print(src,'-->',dst)
count += 1
else:
hanoi(num-1,src,mid,dst)
print(src,'-->',dst)
count += 1
hanoi(num-1,mid,dst,src)
hanoi(3,"A","C","B") # 设置盘子的数量,同时将num数量个盘子从柱子A移动到柱子C,辅助柱子为柱子B
print(f"移动了:{count}次")
运行结果