汉诺塔--2.0版本

博客介绍了汉诺塔问题,阐述其规则为每次只能移动一个盘子且小盘子需在大盘子之上。详细说明了不同盘子数量(n=1、2、3、n)时的移动方法,均借助递归实现,如n=n时,先将n - 1个盘子从A借助C移到B,再将最大盘子从A移到C,最后将B上n - 1个盘子借助A移到C。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

汉诺塔

  • 汉诺塔规则:
    • 1.每次只能移动一个盘子
    • 2.任何一次移动,一个塔的状态,必须是小盒子在上,大盒子在下
    • 移动方法:
      • n = 1 :直接把A上面的一个盘子移动到C上 A->C

      • n = 2 :

        • A.把小盘子从A放到B上 A->B
        • B.把A上剩下的最大盘子移动到C上去 A->C
        • C.把B上两个盘子,借助于A,挪到C上去,调用递归 B->C
        • 需要3步
      • n = 3:

        • A.把A上面两个盘子,通过C移动到B上去,调用递归
        • B.把A上剩下的一个盘子挪到C上去,A->C
        • C.把B上n-1盘子,借助于A,移动到C上去,调用递归
        • 需要7步
      • n = n:
        A.把A上的n-1个盘子,借助于C,移动到B上去,调用递归
        B.把A上的最大盘子,也是唯一一个,移动到C上,A->C
        C.把B上n-1个盘子,借助于A,移动到C上,调用递归

          def hano(n,a,b,c):
              """
              汉诺塔的递归实现(n =64)
              :param n: 代表几个盘子
              :param a: 代表第几个塔
              :param b: 代表第二个塔,中间过渡的塔
              :param c: 代表第三个塔
              :return:
              """
              if n ==1:
                  print(a,"-->",b)  #如果只有一层,直接从a移动到b
              else:
                  hano(n-1,a,c,b) #将前63个盘子从a移动到b上(借助c)
                  print(a,"-->",c)#将最底下的第64个盘子从a移动到c上
                  hano(n-1,b,a,c)#将b上面的63个盘子移动到c上
          
          a = "A"
          b = "B"
          c = "C"
          n = int(input("请输入汉诺塔层数:"))
          hano(n,a,b,c)
          
          a="A"
          b="B"
          c="C"
          n=1
          hano(n,a,b,c)
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值