''' 汉诺塔问题无论在任何编程语言里都是经典问题,是采用递归算法的经典案例,该问题能够抽象以下: 一 3根圆柱A,B,C,其中A上面串了n个圆盘 二 这些圆盘从上到下是按从小到大顺序排列的,**大的圆盘任什么时候刻不得位于小的圆盘上面** 三 **每次移动一个圆盘**,最终实现将全部圆盘移动到C上 利用Python语言接近天然语言的特性,开发者能够更容易的将递归算法翻译成程序语句,须要的代码量很小。汉诺塔问题的解决步骤用语言描述很简单,仅三步: A,B,C三个圆柱,分别为初始位,过渡位,目标位,设A柱为初始位,C位为最终目标位 (1)将最上面的n-1个圆盘从初始位移动到过渡位 (2)将初始位的最底下的一个圆盘移动到目标位 (3)将过渡位的n-1个圆盘移动到目标位 对于递归算法中的嵌套函数f(n-1)来讲,其初始位,过渡位,目标位发生了变化 ''' def move(n, a, b, c): # n为圆盘数,a表明初始位圆柱,b表明过渡位圆柱,c表明目标位圆柱 if n == 1: print(a, '-->', c) else: move(n - 1, a, c, b) # 将初始位的n-1个圆盘移动到过渡位,此时初始位为a,上一级函数的过渡位b即为本级的目标位,上级的目标位c为本级的过渡位 print(a, '-->', c) move(n - 1, b, a, c) # 将过渡位的n-1个圆盘移动到目标位,此时初始位为b,上一级函数的目标位c即为本级的目标位,上级的初始位a为本级的过渡位 move(2, 'A', 'B', 'C') ''' A --> B A --> C B --> C ''' # n层当作两层,1个为1层,余下的n-1层排序好了 # n-1层当作2层,1个为1层,余下的n-2层排序好了 # 5层当作2层,1个为1层,余下的4层排序好了 # 4层当作2层,1个为1层,余下的3层排序好了 # 3层当作2层,1个为1层,余下的2层排序好了 # 2层当作1层,1个为1层,余下的1层排序好了 # 1层 A-->C