汉洛塔简介:
汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
汉洛塔的难度随层数递增而逐渐增加(其实方法是一样的,顶多会被视觉误导),而解决方法可以用递归实现
如果有兴趣不妨去试试
汉洛塔在线玩
话不多说,上代码!
"""使用递归解决汉洛塔问题"""
s = 0 # 计数君^_^!
def hanoi(n, x, y, z):
"""
n为汉洛塔的层数
x为汉洛塔的初始位置
y为移动汉洛塔的辅助位
z为要将汉洛塔移动到的目标位
"""
global s
if n == 1:
print(x, '-->', z) # 直接移动到目标位置
s += 1
else:
hanoi(n - 1, x, z, y) # 将x上的n-1层汉洛塔移动到y上
print(x, '-->', z) # 将x的最底层移动到z上
s += 1
hanoi(n - 1, y, x, z) # 将y上的n-1层汉洛塔移动到z上
return s
if __name__ == '__main__':
n = int(input('请输入汉洛塔的层数'))
x = input('请输入汉洛塔的初始位置')
z = input('请输入汉洛塔的目标位置')
y = input('请输入汉洛塔用到的辅助位置')
print('最少移动', hanoi(n, x, y, z), '次')
关于代码:
关于x, y, z的位置互换其实没必要理解太清楚,不妨试试这样去理解,(x, y, z)中x的位置为你移动之前的位置,y的位置为移动过程中要借用到的位置,z的位置为要移动到的目标位置