C 河内塔内圆盘的移动
请使用F7逐步向我解释递归过程 我只是无法将回报与控制流联系起来C 河内塔内圆盘的移动,c,recursion,C,Recursion,请使用F7逐步向我解释递归过程 我只是无法将回报与控制流联系起来 #include<stdio.h> #include<conio.h> void t_of_h(char, char, char, int); void main() { int n; clrscr(); printf("Enter no of DISC in Tower of Hanoi : "); scanf("%d",&n); printf("\
#include<stdio.h>
#include<conio.h>
void t_of_h(char, char, char, int);
void main()
{
int n;
clrscr();
printf("Enter no of DISC in Tower of Hanoi : ");
scanf("%d",&n);
printf("\nTower of Hanoi using %d DISCS\n",n);
t_of_h('X', 'Y', 'Z', n);
getch();
}
void t_of_h(char p1, char p2, char p3, int n)
{
if(n==0)
printf("Unsuccessful move\n");
if(n==1)
printf("Move DISC from %c to %c\n",p1,p3);
else
{
t_of_h(p1,p3,p2,n-1);
t_of_h(p1,p2,p3,1);
t_of_h(p2,p1,p3,n-1);
}
}
#包括
#包括
void t_of_h(char,char,char,int);
void main()
{
int n;
clrsc();
printf(“在河内塔中输入光盘编号:”);
scanf(“%d”和“&n”);
printf(“\n使用%d张光盘的河内电源,\n”,n);
t_of_h('X','Y','Z',n);
getch();
}
无效t_of_h(字符p1、字符p2、字符p3、整数n)
{
如果(n==0)
printf(“不成功的移动\n”);
如果(n==1)
printf(“将光盘从%c移动到%c\n”,p1,p3);
其他的
{
t_of_h(p1,p3,p2,n-1);
t_of_h(p1,p2,p3,1);
t_of_h(p2,p1,p3,n-1);
}
}
如何将N个磁盘从A塔移动到B塔
好的-我已经运行了代码。它对这一过程的形象化令人毛骨悚然。很难看出发生了什么事。但它直接反映了算法的功能。现在怎么办 1个磁盘 2个磁盘 请注意,它正在将磁盘从X移动到Z。如何将两个磁盘从X移动到Z?将顶部磁盘从X移动到Y。将底部磁盘从X移动到Z。将原始顶部磁盘从Y移动到Z 3个磁盘
如何将N个磁盘从A塔移动到B塔
好的-我已经运行了代码。它对这一过程的形象化令人毛骨悚然。很难看出发生了什么事。但它直接反映了算法的功能。现在怎么办 1个磁盘 2个磁盘 请注意,它正在将磁盘从X移动到Z。如何将两个磁盘从X移动到Z?将顶部磁盘从X移动到Y。将底部磁盘从X移动到Z。将原始顶部磁盘从Y移动到Z 3个磁盘 使用F7 如果你在理解递归时遇到困难,拿出一支笔和一张纸,一步一步地完成这个程序。用正确的参数堆叠每个调用 当您可以可视化它时,它应该更简单。使用F7 如果你在理解递归时遇到困难,拿出一支笔和一张纸,一步一步地完成这个程序。用正确的参数堆叠每个调用
当您可以可视化它时,它应该更简单。请注意“void main()”是错误的-
int main()
是可以的,尽管int main(void)
可以说更好,并且成功后应返回0。另外,
头是非常特定于Windows的,使用clrsc()
和getch()
也是如此-它们不是ISO标准的C函数和头。如果我使用int main(),我将面临使用getch()和return语句的冲突。一条警告消息即将出现:无法访问code@alfesani:那么,getch()应该在
中声明;您需要添加“return 0;”在声明返回int
时的main()
末尾。无法访问的代码?这很奇怪。。。当我在MacOS X上测试编译时,我省略了“clrsc()”、“getch()”和标题。在GCC 4.5.1下,代码是干净的,带有选项GCC-O-std=c99-Wall-Wextra-Wmissing prototype-Wstrict prototype-Wold样式定义hanoi.c-O hanoi
。对不起,先生,我不是说你错了。我使用windows xp和turbo c编译器。我是bca二年级的学生。我对工业上使用的编译器一无所知。我的编译器给出了输出,我刚刚发布了它。如果你介意的话,我真的sorry@alfesani当前位置我没有大惊小怪-我手头没有Windows机器,所以我无法重现您的问题。我不确定这是否不应该被视为一种“残酷和不寻常的惩罚”,让人们在Windows上学习计算——特别是C编程。这也意味着我无法告诉您为什么会看到所看到的错误。请注意,“void main()”是错误的-int main()
是可以的,尽管int main(void)
可以说更好,成功后您应该返回0。另外,
头是非常特定于Windows的,使用clrsc()
和getch()
也是如此-它们不是ISO标准的C函数和头。如果我使用int main(),我将面临使用getch()和return语句的冲突。一条警告消息即将出现:无法访问code@alfesani:那么,getch()应该在
中声明;您需要添加“return 0;”在声明返回int
时的main()
末尾。无法访问的代码?这很奇怪。。。在MacOS X上进行编译测试时,我省略了“clrsc()”、“getch()”和头文件。在GCC 4.5.1下,使用选项GCC-O-std=c99-Wall-Wextra-Wmissing-prototype-Wstrict-prototype,代码很干净,有明显的修复
Enter no of DISC in Tower of Hanoi : 1
Tower of Hanoi using 1 DISCS
Move DISC from X to Z
Enter no of DISC in Tower of Hanoi : 2
Tower of Hanoi using 2 DISCS
Move DISC from X to Y
Move DISC from X to Z
Move DISC from Y to Z
Enter no of DISC in Tower of Hanoi : 3
Tower of Hanoi using 3 DISCS
Move DISC from X to Z
Move DISC from X to Y
Move DISC from Z to Y
Move DISC from X to Z
Move DISC from Y to X
Move DISC from Y to Z
Move DISC from X to Z