我觉得我们的分歧在于:你是从大局出发,我从细微之处分析程序的结构。这些函数毕竟是我亲手编写,我觉得我已经掌握了程序中的细节。我再写一个四个参数都进栈的函数:
void hanoi_all(int n,char x,char y,char z)
{
struct
{
int
n;
char x;
char y;
char z;
}s_all[100];
/*定义栈保存所有参数*/
int topa=0;
char t;
while(n>1||top)
{
if(n>1)
{
s_all[top].n=n--;
s_all[top].x=x;
s_all[top].y=y;
s_all[top++].z=z;
t=y; y=z; z=t;
}
else
{
move(x,1,z);
n=s_all[--top].n; x=s_all[top].x;
y=s_all[top].y;
z=s_all[top].z;
move(x,n,z);
--n;
t=x;
x=y;
y=t;
}
}
}
程序的效率体现在细微之处,我的观点是:在自己的能力范围内,能让程序效率多高就多高。
不知道我说:”hanoi_all函数的效率测试结果比hanoi_w_w(hanoi_w_if)好“你会不会相信?(反正你也没有vc++)
好了,我不争论了,我太累了,要sleeping去了。
对了,这个程序可以用”广度优先策略“重写其非递归算法,不知道simpley同学有没有这个兴趣改写一下?