汉诺塔问题大家都懂,就是将规定的n个盘子从一个柱子上移动到另一个柱子上,核心思想就是递归的描写还有借助另一个柱子。
其主要的三个步骤就是:
1.将x的n-1个借助z移动到y上
2.将第n个最大的那个直接从x移动到z上
3.将y的n-1个借助x移动到z上
主要的移动move递归函数如下:
void move(int n,char x,char y,char z) //将x上的n个盘借助y移动到z上
{
if(n==1){
printf("%c-->%c\n",x,z); //相当于结束递归的条件 就是n=1的时候直接将最后一个直接移动过去
}
else{
move(n-1,x,z,y);//将x的n-1个借助z移动到y上
printf("%c-->%c\n",x,z); //将第n个最大的那个直接从x移动到z上
move(n-1,y,x,z);//将y的n-1个借助x移动到z上
}
}
这就是move函数,下面是完整代码:
#include<stdio.h>
void move(int n,char x,char y,char z) //将x上的n个盘借助y移动到z上
{
if(n==1){
printf("%c-->%c\n",x,z); //相当于结束递归的条件 就是n=1的时候直接将最后一个直接移动过去
}
else{
move(n-1,x,z,y);//将x的n-1个借助z移动到y上
printf("%c-->%c\n",x,z); //将第n个最大的那个直接从x移动到z上
move(n-1,y,x,z);//将y的n-1个借助x移动到z上
}
}
int main()
{
int n;
printf("你想要的汉诺塔层数为:\n");
scanf("%d",&n);
printf("移动的顺序步骤如下:\n");
move(n,'x','y','z');
return 0;
}
如果输入n=3,会有如下结果:
按照上面的移动顺序便可以达到想要的汉诺塔的结果。