• python的递归算法学习(3):汉诺塔递归算法


    汉诺塔问题是递归函数的经典应用,它来自一个古老传说:在世界刚被创建的时候有一座钻石宝塔A,其上有64个金蝶。所有碟子按从大到小的次序从塔底堆放至塔顶。紧挨着这座塔有另外两个钻石宝塔B和C。从世界创始之日起,波罗门的牧师就一直在试图把塔A上的碟子移动到C上去,其间借助于塔B的帮助。每次只能移动一个碟子,任何时候都不能把一个碟子放在比它小的碟子上面。当牧师们完成这个任务时,世界末日也就到了。 
    对于汉诺塔问题的求解,可以通过以下3步实现: 
    (1)将塔A上的n -1个碟子借助C塔先移动到B塔上; 
    (2)把塔A上剩下的一个碟子移动到塔C上; 
    (3)将n - 1个碟子从B塔借助塔A移动到塔C上。 

    很显然,这是一个递归求解的过程,假设碟子数n=3时,汉诺塔问题的求解过程如下图所示:

    图2

    汉诺塔的递归算法

    i = 1
    def move(n, mfrom, mto) :
      global i
      print("第%d步:将%d号盘子从%s -> %s" %(i, n, mfrom, mto))
      i += 1
    
    def hanoi(n, A, B, C) :
      if n == 1 :
        move(1, A, C)
      else :
        hanoi(n - 1, A, C, B) 
        move(n, A, C)    
        hanoi(n - 1, B, A, C)
    
    #********************程序入口**********************
    try :
      n = 3
      print("移动步骤如下:")
      hanoi(n, 'A', 'B', 'C')
    except ValueError:
      print("please input a integer n(n > 0)!")
  • 相关阅读:
    $$Ctrl+shift+M分数罗马字母小写
    设置字体大小加粗斜体下划线
    无序列表有序列表
    数学公式插入
    文本居中、代码插入、图片插入
    VM 使用问题 | 安装失败->>注册表
    VM小技巧——虚拟机解决vm窗口太小的办法
    OneNet平台实践
    linux 打包 | autoconf 使用方法
    C 总结 | 复习注意点
  • 原文地址:https://www.cnblogs.com/aomi/p/7047553.html
Copyright © 2020-2023  润新知