24:递归3:汉诺塔

一、问题分解:将X上的64个盘子移动到Z上:

        1.将前63个盘子从X移动到Y上

        2.将第64个盘子从X移动到Z上

        3.将前63个盘子从Y移动到Z上。

       步骤1:将X上的63个盘子移动到Y上

       步骤2:将X上的第64个盘子移动到Z上                     

       步骤3:将Y上的63个盘子移动到Z上   

三、步骤1进一步分解:

      “将X上的63个盘子移动到Y”上可分解为:

               步骤4:将X上的前62个盘子移动到Z上

               步骤5:将X上的第63个盘子移动到Y上

               步骤6:将Z上的前62个盘子移动到Y上

四、步骤3进一步分解:

        “将Y上的63个盘子移动到Z上”可分解为:

                步骤7:将Y上的前62个盘子移动到X上

                步骤8:将Y上的第63个盘子移动到Z上

                步骤9:将X上的62个盘子移动到Z上 

五、抽象:

          步骤1:将前n-1个盘子,由起始柱(借助目标柱)移动到中间柱

          步骤2:将第n个盘子由起始柱移动到目标柱

          步骤3:将前n-1个盘子由中间柱(借助起始柱)移动到目标柱

六、代码:

       

>>>def hanoi(n, x, y, z):          
       if n== 1:
           print(x, '-->', z)
       else:
           #将前n-1个盘子从x(借助中间柱z)移动到y上

           hanoi(n-1,x, z, y)

           #将第n个盘子从x移动到z上
           print (x, '-->', z)

           #将前n-1个盘子从y(借助中间柱x)移动到z上
           hanoi(n-1,y, x, z)

   n = int (input ('请输入汉诺塔的层数:'))
   hanoi(n, 'X', 'Y', 'Z')
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值