【python】用递归解决汉洛塔问题

本文介绍了汉诺塔问题的起源及解决思路,并提供了一段使用递归方法解决汉诺塔问题的Python代码。通过输入层数和柱子位置,程序将计算并输出最少的移动次数。理解递归在解决此类问题中的应用对于提升编程技能有所帮助。
摘要由CSDN通过智能技术生成

汉洛塔简介:

汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着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的位置为要移动到的目标位置

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值