汉诺塔问题求解

来源:百度知道 编辑:UC知道 时间:2024/06/03 00:08:28
#include<stdio.h>
void hanoi(int n,char a,char b,char c)
{
if(n==1)
printf("%c-->%c\n",a,b);
else{
hanoi(n-1,a,c,b);
printf("%c-->%c\n",a,b);
hanoi(n-1,c,b,a);
}
}
int main(void)
{
int n;
printf("input n:");
scanf("%d",&n);
printf("the steps for %d disk are:\n",n);
hanoi(n,'A','B','C');
return 0;
}
哪位可以帮我写出这个程序从(n-1)到(n-2)的输出步骤
还有,这个程序的输出是按照怎么的顺序进行的,我看不懂啊
谢谢了,我刚开始学C什么都看不太懂

这个汉诺塔我觉得可以算是谭浩强书上最难得一个例题了 我也花费了很长时间才理解的 我把我曾经写在书上的一些自己总结的东西写给你 不知道你能不能看得明白
void move(char x,char y)
{
printf("%c-->%c\n",x,y);
}
一。void hanoi(int n,char one,char two,char three)
{
if(n==1)move(one,three);
else{
二。hanoi(n-1,one,three,two);
三。move(one,three);
四。hanoi(n-1,two,one,three);
}
}
main()
{
int m;
printf("输入塔的个数");
scanf("%d",&m);
hanoi(m,'A','B','C');
}
我上面标注了4个地方
假设这里输入的是3
1的作用是从1座借助2座移到3座
2的作用是将n-1个盘子移到2座,具体怎么移动先不要管因为要进行递归操作
3的作用是将前卖弄最下面的盘子移到C
4的作用是将2座上剩下的N-1个盘子移到C上
以上的2,4进行了递归运算
运行过程如下
输入3
void hanio(int 3,char x,char y,char z)
hanoi(n-1,one,three,two);
*****************→(2-1,x,y,z)→(1,x,y,z)→x→z
****(3-1,x,z,y)→运行2*********************x→y
*****************→(2-1,z,x,y)→(1,z,x,y) *z→y
move(one,three);
运行3******************