python解决汉诺塔问题

汉诺塔问题

  • 规则:
    每次移动一个盘子
    任何时候大盘子在下面,小盘子在上面

  • 方法:
    n=1: 直接把A上的一个盘子移动到C上, A->C
    n=2:
    把小盘子从A放到B上, A->B
    把大盘子从A放到C上, A->C
    把小盘子从B放到C上, B->C
    n=3:
    把A上的两个盘子,通过C移动到B上去, 调用递归实现
    把A上剩下的一个最大盘子移动到C上, A->C
    把B上两个盘子,借助于A,挪到C上去, 调用递归
    n = n:
    把A上的n-1个盘子,借助于C,移动到B上去,调用递归
    把A上的最大盘子,也是唯一一个,移动到C上,A->C
    把B上n-1个盘子,借助于A,移动到C上, 调用递归

  • 代码如下

def hano(n, a, b, c):
    '''
    汉诺塔的递归实现
    n:代表几个盘子
    a:代表第一个塔,开始的塔
    b:代表第二个塔,中间过渡的塔
    c:代表第三个塔, 目标塔
    '''
    if n == 1:
        print(a, "-->", c)
        return None
    '''
    
    if n == 2:
        print(a, "-->", b)
        print(a, "-->", c)
        print(b, "-->", c)
        return None
    '''
    # 把n-1个盘子,从a塔借助于c塔,挪到b塔上去
    hano(n-1, a, c, b)
    print(a, "-->", c)
    # 把n-1个盘子,从b塔,借助于a塔,挪到c塔上去
    hano(n-1,b, a, c)
    
a = "A"
b = "B"
c = "C"

n = 1
hano(n, a, b, c)
  • 如上代码结果为A --> C

  • 三层的结果

n = 3
hano(n, a, b, c)

  • 结果为
  • A --> C
    A --> B
    C --> B
    A --> C
    B --> A
    B --> C
    A --> C
  • 总结
    汉诺塔的原理就是不管初始的A中有多少个盘子,永远要借助B盘子将A最下面的盘子移动到C上,然后将B上的盘子借助A将最后一个移动到C上,由此重复,因此只需要递归不断的调用自己即可实现汉诺塔。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值