算法---解决“汉诺塔”问题
# 初始化步骤计数器
i = 1
# 定义移动盘子的函数
def move(n, mfrom, mto):
global i # 使用全局变量i来跟踪步骤
print("第%d步:将%d号盘子从%s->%s" % (i, n, mfrom, mto)) # 打印移动步骤
i += 1 # 步骤计数器加1
#第一种方法
# 定义汉诺塔问题的递归函数
def honol(n, A, B, C):
if n == 1: # 如果只有一个盘子,直接移动到目标柱
move(1, A, C)
else:
honol(n-1, A, C, B) # 递归地将上面的n-1个盘子从A移动到B
move(n, A, C) # 将第n个盘子从A移动到C
honol(n-1, B, A, C) # 递归地将B上的n-1个盘子移动到C
try:
n = int(input("please input a number:")) # 请求用户输入盘子的数量
print("移动步骤如下:") # 提示用户即将显示移动步骤
honol(n, 'A', 'B', 'C') # 调用汉诺塔函数,开始移动盘子
except ValueError: # 如果输入不是整数,则捕获异常
print("please input a integer n(n>0)!") # 提示用户输入一个正整数
第二种方法
def hanoi(n,x,y,z): if n == 1: print(x,"-->",z) else: hanoi(n-1,x,z,y) print(x,"-->",y) hanoi(n-1,y,x,z) while True: n=int(input("请输入汉诺塔的层数:")) hanoi(n,"x","y","z")
输出结果:
第一种方法:
第二种