解题思路:
根据汉诺塔游戏的机制我们知道,必须先将第n个盘子移动到C杆上。但如果直接将第n个盘子移动到目标位置又是不行的,因为在这第n个盘子前还有n-1个盘子。
此时,我们可以假设有一个函数 function(),它可以帮我们将前面n-1个盘子移动到除目标位置以及起始位置外的那个杆子处(即 B 杆)。这样一来,我们就只需要做一件工作,将第n个盘子移动到 C 杆上。还没结束!因为我们还需要将刚才放到 B 杆上的前n-1层盘子也放到 C 杆上。即:
移走前n-1层盘子;
将第n层盘子移至目标位置;
将前n-1层盘子移至目标位置。
设移动n个圆盘所需的最少步数为F(n),若要把n个圆盘从 A 柱移至 C 柱,则可拆解为如下步骤:
1.将n-1个圆盘从 A 柱移至 B 柱,需要 F(n−1) 步;
2.将余下的最大圆盘从 A 柱移至 C 柱,需要 1 步;
3.将n-1个圆盘从 B 柱移至 C 柱,需要F(n−1) 步。