Python实现汉诺塔问题

       汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

一、汉诺塔问题不管在任何编程语言里都是经典问题,是采用递归算法的经典案例,该问题可以抽象如下:

1. 3根圆柱A,B,C,其中A上面串了n个圆盘

2. 这些圆盘从上到下是按从小到大顺序排列的,大的圆盘任何时刻不得位于小的圆盘上面

3. 每次移动一个圆盘,最终实现将所有圆盘移动到C上   

二、利用Python语言接近自然语言的特性,开发者可以更容易的将递归算法翻译成程序语句,需要的代码量很小。汉诺塔问题的解决步骤用语言描述很简单,仅三步:

A,B,C三个圆柱,分别为初始位,过渡位,目标位,设A柱为初始位,C位为最终目标位

(1)将最上面的n-1个圆盘从初始位移动到过渡位

(2)将初始位的最底下的一个圆盘移动到目标位

(3)将过渡位的n-1个圆盘移动到目标位

代码如下:

1 def move(n,a,b,c):       
2     if n==1:        
3         print(a,'-->',c)    
4     else:        
5         move(n-1,a,c,b)           
6         print(a,'-->',c)         
7         move(n-1,b,a,c)
8 move(4,'A','B','C')

(改变n可以改变盘子数)

效果如下:

posted @ 2020-03-31 14:42  WendyWW  阅读(399)  评论(0)    收藏  举报