今天学习递归的时候,书上以一款名叫的解谜游戏为例。虽然开始被那算法搞蒙了,不过我倒是把这游戏的玩法给解出来了,这里分享一下. 游戏简介: 游戏里有三根金刚石柱子,左边的柱子上从下往上按照大小顺序摞着N片黄金圆盘。玩家需要做的是把圆盘从下面开始按从大顺序重新摆放在右边的柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。 首先我们来移动最简单的三个圆盘: 1C代表最小号的盘子(1号盘子)第一步放在C位置,然后2号盘子放在B位置........上面这个步骤走完后,三个盘子就被按照大小顺序放在了C位置. 想象一下,如果有4个盘子呢?看下图。 因为第四个盘子是目前最大的盘子,在移动的时候按照规则必须放在最下方,所以A位置上只能有4号盘,C位置上面不能有盘,那么所有其他盘子必须按照顺序放在B位置.同时可得出有N个盘子的话,移动最大的盘时也是这种情况. 那么把三个盘从左边移动到中间的解法是: 3个盘子移动到中间后,就可以把第四个盘子移动到右边了如果左边是5个盘子的话,其中4个盘子必须在中间,移动的方法就不能和只有4个盘子一样,所以1号盘子第一步不能走B,那么只能走C了. 那么可否做一个猜想: 要让奇数个盘子从左边全部移动到右边,那么1号盘子第一步要移动到右边(C位置), 要让偶数个盘子从左边全部移动到右边,那么1号盘子第一步要移动到中间(B位置). 现在我给出所有移动三个盘子的情况: 这里得出结论:三个盘子在任何位置情况下都可以移动到其他位置.,那么我们就可以把三个盘子当做一个盘子来看待。 举例移动5个盘子( 这里随便下载的手机游戏,用轮子代替) 首先我们把上面3个看成一个盘子(1号),倒数第二个为2号,最后一个为3号。位置分别为ABC。 第1,2步:把最上层三个盘子(1号)按照上面给出的公式移动到C位置,2号移动到B位置。 第3,4步:1号移动到B位置(此时2号上面),3号移动到C位置 第5,6,7步:1号(这里1号是最小的三个盘子)移动到A位置,2号移动到C位置(此时3号上面),1号再移动到C位置。 上面的7步走完后就OK了! 玩更多层的话,把多个盘子当做一个来看待,问题就变明朗了,但是走的步数会增加很多。 今天过了8层就有点头晕了,好几百步吧==!