思考了一周,结果还是看答案才写出来的。
思考一周,自己亲自玩了疯狂汉诺塔的游戏,玩到了10层(用时半个小时才做完,正确步骤是1023步,我用了1110步,错了87步)。对这个游戏有了实际操作理解后,才进行编程。
当时觉得难点如下:
1、如何在移动的时候,还打印出正确的步骤。
2、开始觉得n是偶数和奇数,第一步移到的塔不一样。(偶数是b塔,奇数是c塔)。觉得是否要添加一个判断语句。
3、递归函数里,要写几个特例,开始我写到了n==1,n==2,n==3的三种情况。觉得应该分不了这么多。
4、递归函数里,要递归几次(就是要用到move几次?)。我是只用了一次,就是最后一个move(n-1,b,a,c)写对了。所以显示出来的步数少了,比如n=4时,才11步。
总结如下:
1、要想写出编程,必须亲自玩汉诺塔的游戏,至少玩到7层以上!
2、要自己尝试去写,不用直接看答案,思考过程比答案更痛苦,也更有趣!
3、关键之处在于递归里的第一个move(n-1,a,c,b)。意思是把 (n-1) 个圆盘移动到 b。这个move的动作之后需要最下面一个盘移动a-c,就是print a-->c。
4、之后再把b上面的盘移动回到c,就是move(n-1,b,a,c)