永发信息网

算法问题,递归。

答案:1  悬赏:0  手机版
解决时间 2021-05-07 01:24

用于实现汉诺塔转置计算的。最后条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

卡了。

首次提问,没分,出答案追加。

最佳答案
move()函数把n-1个盘子移动中间柱(不是最终的目标柱)后,然后把第n个盘子移动到目标柱。我写了一个程序,如下:
#include<stdio.h>
void move(int n,char A,char B,char C)
{
    if(n==1)
    {
        printf("Move disk %d from %c to %c\n",n,A,C);
    }
    else
    {
        move(n-1,A,C,B);
        printf("Move disk %d from %c to %c\n",n,A,C);
        move(n-1,B,A,C);
    }
}

void main()
{
    int n;
    printf("请输入数字n以解决n阶汉诺塔问题:\n");
    scanf("%d",&n);
    move(n,'A','B','C');
}
//结果:

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
鬼泣从40~50级
上海松江婷美减肥药店在哪里
索爱哪款手机待机最长?
在职研究生要怎么办理?
黑莓9500和夏普825SH高中女生更适合哪一个?
唱歌前的开场白台词,我们班要举行唱歌比赛,怎
有什么方法可以很好的缩小脸上的毛孔
格力福和专卖店怎么去啊,有知道地址的么
我现在初三,身高177,当大前锋行发?
QQ空间看不到投票内容
腋下 淋巴 要 怎么疏通 ?
卡农是什么意思?
男子心跳数目
爱护眼睛的名言和方法,形容女人眼睛漂亮的成
哪种精油补水保湿
推荐资讯
火钻宝箱哪里得的?
IPHONE固件3.1.2怎么越狱?
映客直播怎么上热门,映客好不好上热门怎么才
经常站立,睡醒了腰痛
怎么克服晕车
计算机CPU和内存的问题?
为什么 CHENG MENG YA 不喜欢我
魔域什么BB好?
k取什么整数时,方程2kx—4=(k+2)乘x的解是
郧阳区谭山国土所怎么去啊,有知道地址的么
请问要学西餐哪所最专业
谁能帮我做个炫舞游戏里面自定义戒指的蕥字
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?