用于实现汉诺塔转置计算的。最后条MOVE()逻辑上实现的是什么东西,进入了几次?N大于3以后输出表项变大了一倍多,在纸上画迷糊了。
MOVE()
{
if(n==1)
printf("c%---->c%",x,z\n);
else
{
move(n-1,x,z,y);
print("c%----->c%\n",x,z);
move(n-1,y,x,z);
}
}
从代码的理解是塔盘N=1将x轴塔盘移至z轴,否则将N-1个塔盘移至b轴,再将第N个塔盘移至C,如此递归,回溯N-1当层执行print("c%----->c%\n",x,z);
尽量从逻辑上描述下,附N=4实参及输出:
4 a b c
3 a c b
2 a b c
1 a c b
1 b a c
3 a c b
2 c a b
1 c b a
4 N=4卡住了
a--->b
a--->c
b--->c
a--->b
c--->a
卡了。
首次提问,没分,出答案追加。