汉诺塔
汉诺塔是根据一个印度传说形成的数学问题:
有三根杆子A, B, C. A杆上有n个穿孔圆盘, 盘的尺寸由下到上依次变小.
要求按照下列规则将所有圆盘移至C杆:
- 每次只能移动一个圆盘
- 大盘不能叠在小盘上面
找出最少需要移动多少次, 并打印移动的方案.
思考
-
汉诺塔的目标是将磁盘移动到C杆上,且保持原盘与A杆相同的顺序
-
两个条件:一是一次只能移动一个圆盘,二是不能在较小的圆盘下放置较大的圆盘
-
如果有三个圆盘会发生什么?
- 首先我们忽略最大的圆盘,先考虑如何将剩下的圆盘移动到B杆
- 我们可以用移动2个圆盘的方式移动,将其他圆盘移动到B杆,在将最大的移动到C杆上
- 在用移动B杆2个圆盘的方式,将B杆的圆盘移动到C杆上
-
依照这个流程,将它抽象为归纳思考
- 1个圆盘可以直接达成目标
- 假设有n个圆盘,我们可以达成目标,那n+1个圆盘呢?
- 我们将忽略最大的圆盘,将剩余n个圆盘移动到B杆上,然后将最大的圆盘移动到C杆上
- 再将整个B杆上的圆盘移动到C杆上
- 所以:移动的步数为2次n个圆盘的移动步数再加一次n+1号圆盘移动的步数
解决方案:
- 假设有n个盘,我们就需要使用n-1的汉诺塔移动方案
- 假设有n-1个盘,我们就需要n-2的汉诺塔解决方案,明白了吧,可以用到递归解决