汉诺塔的C程序怎么编啊?

来源:百度知道 编辑:UC知道 时间:2024/06/09 16:14:20
"小弟是软件工程的一个学生,今天老师上课用递归作这题.代码:"
"void WC(int n,char *A,char *B,char *C)
if(n==1)
{
printf("move %s to %s ",A,C);
}
else
{
WC(n-1,A,C,B);(我就不明白了,这里的A,C,B的顺序为啥这样啊?)
printf("move %s to %s",A,C);
WC(n-1,B,A,C);
}
这是这个递归函数."
"else语句后面的那里不明白啊?怎么回事啊?"
"请哪位大哥详细的讲解一下吧,小弟的C语言愁死了!恳求您100字以上行吗?别说几个字就拜拜了,那您也没帮上小弟啊...谢谢您!!!..."

void WC(int n,char *A,char *B,char *C)//注意这里的目的,是把n个盘子从A移动到C,B是起辅助作用的中间环节,也就是我们总是从第2个参数(A位置)移动盘子到第4个参数(C的位置)
if(n==1)//盘子等于1时,直接从A移到C,不
用借助B
{
printf("move %s to %s ",A,C);
}
else
{
WC(n-1,A,C,B);//根据算法想要把N盘子从A柱子移动到C柱子
先要把n-1个盘子从A移动到B,所以把A放第2参数,B放第4参数
printf("move %s to %s",A,C);//n-1盘子移动完成,把N盘子从A移动到C
WC(n-1,B,A,C);//n-1个盘子已经从A移动到B了,再
把n-1从B移到C上,C上已经有了第N个盘子了,所以这次是B在第2参数,C在第4参数.
}