P1242新汉诺塔解题思路
查看原帖
P1242新汉诺塔解题思路
259955
liuzhong楼主2023/11/15 10:24

解题思路: 根据汉诺塔游戏的机制我们知道,必须先将第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) 步。

2023/11/15 10:24
加载中...