eobeom 发表于 2020-10-11 22:00:48

小白求助 请问hanoi塔的这个函数哪里有问题?

#include <stdio.h>

void hanoi_tower(int n,int ox, int tx, int mx)
{
        if(n<1){
                printf("Error: n>=1\n");
        }else if (n==1){
                printf("%d->%d\n",ox,tx);
        }else{
                hanio_tower(n-1,ox,tx,mx);
                printf("%d->%d\n",ox,tx);
                hanoi_tower(n-1,tx,ox,mx);
        }
}
int main(void)
{
        int n;
        printf("Enter the height of the tower");
        scanf("%d",&n);
        hanio_tower(n,1,3,2);
        return 0;
}

请问哪里有问题?

无助的骚年 发表于 2020-10-11 22:24:30

你在你写的这个函数里调用这个函数怎么行

sunrise085 发表于 2020-10-11 22:25:01

你要弄明白hanoi分三步,后面这三个参数的位置移动不要弄错了
从ox经过mx移动到tx,分三步:
第一步,把前n-1个从ox经过tx移动到mx;
第二步,把最下面的一个从ox移动到tx;
第三步,把n-1个从mx经过ox移动到tx
#include <stdio.h>

void hanoi_tower(int n,int ox, int tx, int mx)
{
      if(n<1){
                printf("Error: n>=1\n");
      }else if (n==1){
                printf("%d->%d\n",ox,tx);
      }else{
                hanoi_tower(n-1,ox,mx,tx);//拼写错误,hanoi_tower写成了hanio_tower;后面的参数位置也写错了,mx和tx写反了
                printf("%d->%d\n",ox,tx);
                hanoi_tower(n-1,mx,tx,ox);//后面的参数位置也写错了
      }
}
int main(void)
{
      int n;
      printf("Enter the height of the tower");
      scanf("%d",&n);
      hanoi_tower(n,1,3,2);//拼写错误,hanoi_tower写成了hanio_tower
      return 0;
}

sunrise085 发表于 2020-10-11 22:26:40

无助的骚年 发表于 2020-10-11 22:24
你在你写的这个函数里调用这个函数怎么行

函数调用自己,这叫递归

无助的骚年 发表于 2020-10-16 21:43:48

sunrise085 发表于 2020-10-11 22:26
函数调用自己,这叫递归

好的,感谢,还没学,以为不行{:10_257:}
页: [1]
查看完整版本: 小白求助 请问hanoi塔的这个函数哪里有问题?