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')
 

猜你喜欢

转载自blog.csdn.net/weixin_41004521/article/details/81123235