标题:Hanoi塔问题
取消只看楼主
撒哈拉沙漠
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2007-8-10
 问题点数:0 回复次数:2 
Hanoi塔问题

Hanoi塔问题

大家给我讲讲红色那段程序的运行吧,有点不明白啊。就按照4的情况来说吧。。。。。
编译运行结果如下:
Input a number:
4


The step to moving 4 diskes:


a-->b


a-->c


b-->c


a-->b


……

#include <stdio.h>
#include <conio.h>
int move(int n,int x,int y,int z)
{
if(n==1)
printf("%c-->%c\n",x,z);
else
{
move(n-1,x,z,y);
printf("%c-->%c\n",x,z);
move(n-1,y,x,z);
}
}

int main(void)
{
int h;
printf("\nInput a number:\n");
scanf("%d",&h);
printf("The step to moving %2d diskes:\n",h);
move(h,'a','b','c');
getch();
return 0;
}

搜索更多相关主题的帖子: Hanoi 
2007-09-28 13:22
撒哈拉沙漠
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2007-8-10
得分:0 
回复:(撒哈拉沙漠)Hanoi塔问题

整体的思想我已经理解了~~~
但是这个程序的具体的步骤不是很清晰~~~~

#include <stdio.h>
#include <conio.h>
int move(int n,int x,int y,int z)
{
if(n==1)
printf("%c-->%c\n",x,z);
else
{
move(n-1,x,z,y);
printf("%c-->%c\n",x,z);
move(n-1,y,x,z);
}
}

int main(void)
{
int h;
printf("\nInput a number:\n");
scanf("%d",&h);
printf("The step to moving %2d diskes:\n",h);
move(h,'a','b','c');
getch();
return 0;
}

分析被调函数的运行步骤如下:
输入一个数4,即n=4,x='a',y='b',z='c'
运行到第一个move(n-1,x,z,y),变成move(3,'a','c','b') 这时是往下执行Printf语句还是返回被调函数重新开始判断n的值?如果往下执行是输出a-->b吗?还是返回被调函数重新开始判断n值,直到n==1时输出a-->b?但是还像两种都不好理解,无法得到和编译显示的一样的结果吧?另外,每返回一次,下面两个move中的y,z(前一个move)和y,x(后一个move)是不是互换的?

谢谢大家,本人有点笨~~呵呵

2007-09-28 15:47
撒哈拉沙漠
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2007-8-10
得分:0 

有点明白了~~~~

也就是说在第一个MOVE被执行后,接下来还要执行printf()语句啊,但是这样的话,第一个输出结果怎么会是a-->b呢?
不应该是a-->c吗?

看来我还是再好好想想。。

2007-09-28 18:47



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-173610-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.341983 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved