解题思路:
(1)要将最左边柱子上的圆盘全部移动到中间柱,并且只能每次移动一个圆盘,小的只能放在大的上面,当圆盘只有两个的时候,只需要3步即可完成,如图所示:
(2)当n=3,即要把左边的三个圆盘放入中间柱的话,需要7步完成,如下图所示:
(3)当我们把最大的圆盘看为一部分,他上面的看成一个整体的时候,那么3步即可完成,如下图所示:
(4) 上述图示基本明白了,如果要解决将n个圆盘从a移动到b的话,可以分解为规模更小的子问题,如果利用递归思想解题的话,最小的子问题也就是出口到底在哪里呢?最小的子问题也就是1个圆盘的时候,直接从a柱移动到b柱即可。
(5)那么当圆盘有两个的时候,因为大盘上面只能落小盘,1号圆盘必须经过b柱先去c柱,这样,2号盘才能一下移动到b柱,然后再将1号盘从c柱移动到b柱
(6)着重分析三个盘子的时候,首先把1号和2号绑在一起,他俩需要跨过b柱放到c柱
步骤1为move(2,a,c,b)即a柱是初始地点,c是目标地点,b是过渡地点
步骤2为将3号盘从a柱移动到b柱,cout<
步骤3为将1号和2号盘从c柱移动到b柱,因为不能一次性移动,所以要借助a柱,即move(2,c,b,a) (7)在上述步骤1的时候,将1和2号盘移动到c柱的时候,又发生了3个步骤 步骤1.1 将1号圆盘放到b柱 步骤1.2 将2号圆盘放到c柱 步骤1.3 将1号圆盘放到c柱 (8)在上述步骤3的时候,将1和2号盘移动到b柱的时候,同样发生了3个步骤 步骤3.1 将1号圆盘放到a柱 步骤3.2 将2号圆盘放到b柱 步骤3.3 将1号圆盘放到b柱 (9)在解决递归问题的时候,分析出可以利用递归思想即可,要去找递归出口和子问题的表达式,如何找到表达式,就找最小子问题和次二小子问题的关系,不要去想过于冗杂的数据和过程, 设move(n,a,b,c)函数为将n个圆盘从a柱(初始柱)移到b柱(目标柱),c柱(过渡柱),那么递归的出口应该是,if(n==1)cout<"< 将n-1个盘子从a柱转移到c柱,b为过渡柱,即move(n-1,a,c,b);