move(n-1,x,z,y);——这句是调用函数,这个函数就是前面声明的:void move(int n,int x,int y,int z)
printf("%c-->%c",x,z);——这句是输出,%c 是指按CHAR型输出,"%c-->%c",就是输出两个CHAR型数据,中间用-->连接。而这两个CHAR的数据就是x和z。比如结果是:a-->c
move(n-1,y,x,z);——这句还是调用函数,这个函数就是前面声明的:void move(int n,int x,int y,int z)
#include<stdioh>
void move(char a,char b)
{
printf("%c->%c\n",a,b);
}
void f(int n,char a,char b,char c)
{
if(n==1) move(a,c);
else
{
f(n-1,a,c,b);
move(a,c);
f(n-1,b,a,c);
}
}
void main()
{
int n;
scanf("%d",&n);
f(n,'a','b','c');
}
这是我的代码 前面的是定义一个函数 这里递归体现在函数里面还有函数 于是会一次又一次的计算 直到最后把N-1以前的都移到B,最下面的移到C,再把其他的从B移到C。。 无返回的话 应该是这里用void 没有return返回数值
你的次数是对的,我觉得就行了啊 ,题目要求输出啥?
给你个标准答案 你看看有什么不同吧:
#include<stdioh>
int i=0;
void movedisc(unsigned n,char fromneedle,char toneedle,char usingneedle) //该函数将fromneedle杆上的n个圆盘借助usingneedle杆移到toneedle上
{
if(n==1)
printf("%2d-(%2d):%c = = > %c\n",++i,n,fromneedle,toneedle); //将fromneedle上的一个圆盘移到toneedle上
else
{
movedisc(n-1,fromneedle,usingneedle,toneedle); //将fromneedle上的n-1个圆盘借助toneedle移到usingneedle上
printf("%2d-(%2d):%c = = > %c\n",++i,n,fromneedle,toneedle); //将fromneedle上的一个圆盘移到toneedle上
movedisc(n-1,usingneedle,toneedle,fromneedle); //将usingneedle上的N-1个圆盘借助fromneedle 移到toneedle 上
}
}
int main()
{
unsigned n;
printf("Please enter the number of discs:");
scanf("%d",&n);
movedisc(n,'a','b','c');
printf("\tTotal:%d\n",i);
return 0;
}
以上就是关于C语言编程(汉诺塔问题)全部的内容,包括:C语言编程(汉诺塔问题)、用c语言编写程序求汉诺塔的移动步骤、C语言实验题——汉诺塔等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)