汉诺塔是一个经典的递归案例,何谓汉诺塔呢?这个源自一个传说:

大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序叠放64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上,摆放规则为小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。当64根柱子移动完毕之日,就是世界毁灭之时。
为了方便大家很好理解汉诺塔问题,我们从简单入手,以三个圆盘为例子,我们有三个柱子分别为A B C,然后在A柱上放了三个圆盘,如下图1所示。
汉诺塔
图1
通过汉诺塔的规则,最终移动的效果如下图2即三个圆盘移动到C柱并从下往上按照大小排序:
汉诺塔
图2
接下来我们通过文字的描述来看如果从图1变为图2这个过程:
1.将绿色圆盘从A柱移动到C柱
2.将红色圆盘从A柱移动到B柱
3.将绿色圆盘从C柱移动到B柱
4.将蓝色圆盘从A柱移动到C柱
5.将绿色圆盘从B柱移动到A柱
6.将红色圆盘从B柱移动到C柱
7.将绿色圆盘从A柱移动到C柱
善于观察的同学可以根据上面文字的描述,应该可以对汉诺塔问题有了比较深入的理解,那么此时我们换成有n个圆盘,那么其实大致的过程就三步
1.将n-1个小圆盘从A柱经过C柱移动到B柱
2.把第n个大圆盘从A柱移动到C柱
3.将n-1个小圆盘从B柱经过A柱移动到C柱
接下来我们用Python来编写这个汉诺塔问题:
汉诺塔
运行结果如下:
汉诺塔