汉诺塔是一个经典递归问题,但是我觉得确实有点绕,看了一会儿,总算有点眉目吧:假设有n层圆盘需要挪动,需要从X,Y,Z之间移动,那么目的就是将最后一层的圆盘挪动到Z轴上,但是要完成这一步,就需要将前n-1层所有的圆盘,按照从小到大的顺序暂时放置在Y轴上。将最后一个圆盘放置到Z上的时候,需要将Y上的n-1层圆盘全部转移到Z上,那么接下来思路就和最开始的一样了!
#include <stdio.h>
#include<stdlib.h>
typedef int Status;
Status move(int n,char x,char y,char z) //意思是将n个圆盘从x通过y移到z上去;
{
if (n == 1)
{
printf("%c --> %c\n",x,z);
return ;
}
move(n-1,x,z,y); //将n-1层全部放置到y上
printf("%c --> %c\n",x,z);//这是最大的那个盘
move(n-1,y,x,z);//再将Y轴上的所有盘转移到Z上。
}
int main()
{
int n;
printf("请输入汉诺塔层数:");
scanf("%d",&n);
move(n,'X','Y','Z');
system("pause");
}
其实,我觉得,当最大的盘转移到目标轴之后呢,我们就可以忽略这个盘了,当它不存在就OK了!