题目描述
https://blog.csdn.net/geekwangminli/article/details/7981570
https://www.cnblogs.com/yanlingyin/archive/2011/11/14/2247594.html
(两篇博客都写的非常棒,第一篇博客的博主写的很详细,讲的老和尚的故事;第二篇博客的博主用了另外一种理解思路,都建议去学习一下,不然可能看不懂我写的)
结果展示:
思路:
我一直信奉代码越简洁、规整,越好;递归真的满足了我的需求。网上很多了写这个,但我老是会有疑问,为啥会这么写呢?它只会告诉我这个东西是什么,却不告诉我为什么,我觉得对我而言,在理解的基础上记忆,才是比较好的学习方法,废话不多说,下面开始讲正题。
题目的要求是输出每一步盘子移动的记录,而设置的Move()函数其实只是一个打印printf(),并没有真正地移动(这步我想了好久才理解),因为题目要求也只是要求你输出盘子的移动记录。
hanoi()函数应该怎么写,别人都已经写的很详细了,我就不赘述了,我只讲讲不一样的地方。以n=3时, 三个柱子分别为a b c为例。
首先写递归,必须写终止条件,不然程序就陷入死循环了。所以有了限制条件:
if(n==0) return;
然后是hanoi()函数里的3步,因为hanoi()定义的是
hanoi(int n,char poleStart,char poleTemp,char poleGoal)
{
hanoi(n-1,poleStart,poleGoal,p