第一篇博客,的确有点标题党的嫌疑(额,亿点点),其实是笔者初学的经历和一些总结(本来想写这个的,结果忘了,就这样),话不多说进入正题。
1.汉诺塔介绍
汉诺塔问题源于一个印度传说......好了,这里就不加赘述了,反正能点进来的应该都知道(不是因为懒.狗头)
2.汉诺塔问题
三根棍子A,B,C,其中A上套有n个环,环从上至下依次增大,每次移动一个环,且只能大环在下,如何借助B将A上的环全部转移到C上。
3.解答
想必新手听到将这个问题写个代码做出来是这个表情
这个是个啥问题?这也能转化为编程问题?这这这,那啥该怎么表示出来啊?.....
(1)将这个问题转化为抽象的那啥,这应该也是卡死大多数新手的第一道难关(我肯定是很轻易就想到了的)。首先,提炼出关键信息,(好像也没啥)碟子的数量n,三根棍子ABC,最后要得到步骤应该用"%c->%c\n"表示(%c就是ABC之一)
(2)分析问题,这个题目对新手来说还是有一定难度的(当然如果是对于笔者这种等级的大帅哥那就不算问题了),空想肯定是想不出来的,动手实践必须的。自己做一次3层(应该都会吧,不会建议看看智慧树)
分析易得,把最下面一个碟子从A转移到C,即图中第四步,就是最特殊的一步,在这之前步骤就是为了将上面的碟子转移到B上,后面的步骤就是为了将B上的碟子转移到C上。你想到了啥
,没错, 就是你刚学的递归!!!(被大帅哥猜中了吧)
总结:第一步:将n-1个碟子从A借助C转移到B上
第二步:将A上最大的碟子转移到C上
第三步:将B上的n-1个碟子转移到C上
代码: