汉诺塔C语言
谭浩强书的汉诺塔没看懂,以下有几个问题:1,请大家注意看main函数的类型是int型,我真不知道谭教授是怎么运行起来的,我在网上找到相同的代码编译居然通过了。。。。2.流...
谭浩强书的汉诺塔没看懂,以下有几个问题:
1,请大家注意看main函数的类型是int型,我真不知道谭教授是怎么运行起来的,我在网上找到相同的代码编译居然通过了。。。。
2.流程问题也许是我搞错了,先输入个3,调用hanoi函数给实参m,A,B,C,因为n!=1,else调用hanoi函数这时进入第二次调用这时形参one等于A,two等于c,three等于b,再循环又到了else...调用hanoi函数这时one two three重新对应a,b,c,这时n == 1,所以调用move函数输出a->c,这时调用完move后,由于else不执行,又因为之前在else里调用了hanoi函数,所以返回到hanoi下面的move继续执行这时我就不解了,move(one,three)?难道调用move函数继续输出a->c吗?可是正确的运行结果是a->b啊,所以到这里我就看不下去了。请大神解答疑惑补充流程或重新梳理流程
#include<stdio.h>
int main()
{
void hanoi(int n,char one,char two,char three);
int m;
printf("input the number of diskes:");
scanf("%d",&m);
printf("The step to moving %d diskes:\n",m);
hanoi(m,'A','B','C');
}
void hanoi(int n,char one ,char two,char three)
{
void move(char x,char y);
if(n==1)
move(one,three);
else
{
hanoi(n-1,one,three,two);
move(one,three)
hanoi(n-1,two,one,three);
}
}
void move(char x,char y)
{
printf("%c-->%c\n",x,y);
} 展开
1,请大家注意看main函数的类型是int型,我真不知道谭教授是怎么运行起来的,我在网上找到相同的代码编译居然通过了。。。。
2.流程问题也许是我搞错了,先输入个3,调用hanoi函数给实参m,A,B,C,因为n!=1,else调用hanoi函数这时进入第二次调用这时形参one等于A,two等于c,three等于b,再循环又到了else...调用hanoi函数这时one two three重新对应a,b,c,这时n == 1,所以调用move函数输出a->c,这时调用完move后,由于else不执行,又因为之前在else里调用了hanoi函数,所以返回到hanoi下面的move继续执行这时我就不解了,move(one,three)?难道调用move函数继续输出a->c吗?可是正确的运行结果是a->b啊,所以到这里我就看不下去了。请大神解答疑惑补充流程或重新梳理流程
#include<stdio.h>
int main()
{
void hanoi(int n,char one,char two,char three);
int m;
printf("input the number of diskes:");
scanf("%d",&m);
printf("The step to moving %d diskes:\n",m);
hanoi(m,'A','B','C');
}
void hanoi(int n,char one ,char two,char three)
{
void move(char x,char y);
if(n==1)
move(one,three);
else
{
hanoi(n-1,one,three,two);
move(one,three)
hanoi(n-1,two,one,three);
}
}
void move(char x,char y)
{
printf("%c-->%c\n",x,y);
} 展开
2个回答
展开全部
编译器一般会在main函数的末尾默认加上return 0;的。
h(3,'A','B','C')
a.h(2,'A','C','B')
h(1,'A','B','C')-----------------输出A-->C
b.mov('A','B')------------------------- 输出A-->B
h(1,'C','A','B') ----------------输出C-->B
move('A','C') )----------------------------------输出A-->C
a.h(2,'B','A','C')
h(1,'B','C','A') )------------------输出B-->A
b.move('B','C') )------------------------输出 B-->C
h(1,'A','B','C')-------------------输出A-->C
更多追问追答
追问
请把流程用文字详细的说一下越详细越好从h(1,'A','B','C')输出A-->C后面开始说用文字叙述。开头:这时n-1为1,作为实参发送给n,因为n == 1,所以调用move函数输出A->C,因为if语句执行了所以else不执行,返回什么的。接下来的流程我简直像乱麻了,请把接下来的流程写下请详细写并发到我的邮箱里974308208@qq.com,如果不懂继续问,如果懂了再加50分谢谢
展开全部
首先,int main()
返回值是指函数结束时返回给宿主环境的一个值。
int main()返回整型值,void main()返回空值。
在一些操作系统下,void main()是不合法的,所以一般要写int main()。
返回值有助于判断函数运行状况或参与运算(就是说这个函数是不是正常运行)
(2)这是一个递归的应该,你要重最后的结束推想到你的前面来。这样思路会比较清晰
返回值是指函数结束时返回给宿主环境的一个值。
int main()返回整型值,void main()返回空值。
在一些操作系统下,void main()是不合法的,所以一般要写int main()。
返回值有助于判断函数运行状况或参与运算(就是说这个函数是不是正常运行)
(2)这是一个递归的应该,你要重最后的结束推想到你的前面来。这样思路会比较清晰
追问
请认真看完我第二个流程的叙述过程,并解答疑惑谢谢
追答
hanoi(n-1,one,three,two);是把“one”上的n-1个往“two”上移,
接着move(one,three);
然后是hanoi(n-1,two,one,three)即把“two”上的n-1个往“three”上移;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询