递归,搜索与回溯算法前置知识



1. 汉诺塔
题目描述:

题目示例:

算法原理(递归):
思路:
这是一道递归方法的经典题目,我们可以先从最简单的情况考虑:
- 假设 n=1,只有一个盘子,很简单,直接把它从 A 中拿出来,移到 C 上;
- 如果 n=2 呢?这时候我们就要借助 B 了,因为先盘子必须时刻都在大盘子上面,共需要 3 步 (为了方便叙述,记 A 中的盘子从上到下为 1 号,2 号)
- 1 号盘子放到 B 上
- 2 号盘子放到 C 上
- 1 号盘子放到 C 上
至此,C 中的盘子从上到下为 1 号,2 号。
- 如果 n>2 呢?这时我们需要用到 n=2 时的策略,将 A 上面的两个盘子挪到 B 上,再将最大的盘子挪到 C 上,最后将 B 上的小盘子挪到 C 上就完成了所有步骤。假如 n=3 时如下图:

因为 A 中最后处理的是最大的盘子,所以在移动过程中不存在大盘子在小盘子上的情况。 则本题可以解释为:
- 对于规模为 n 的问题,我们需要将 A 柱上的 n 个盘子移动到 C 柱上。
- 规模为 n 的问题可以被拆分为规模为 n-1 的子问题:
- a.将 A 柱上的上面 n-1 个盘子移动到 B 柱上。
- b.将 A 柱上的最大盘子移动到 C 柱上,然后将 B 柱上的 n-1 个盘子移动到 C 柱上。




