HaibaraA1 发表于 2021-2-18 14:36:43

一个求解汉诺塔的程序,麻烦复制执行下..看不懂运行原理

#include<stdio.h>
void hanoi(int n,char a,char b,char c);

void hanoi(int n,char a,char b,char c)
{
        if(n==1)
        {
                printf("将圆盘从%c移动到%c\n",a,c);
        }
        else
        {
                hanoi(n-1,a,c,b);
                printf("将一个圆盘从%c移动到%c\n",a,c);
                hanoi(n-1,b,a,c);
        }
}
int main()
{
        int num;
        printf("输入圆盘个数:");
        scanf("%d", &num);
        hanoi(num,'X','Y','Z');
       
        return 0;
}
为什么运行结果中,if框的语句被执行了那么多次..还有else框中形参的位置改变的意义是啥..

李宜文1 发表于 2021-2-18 15:29:46


#include<stdio.h>
void hanoi(int n,char a,char b,char c);

void hanoi(int n,char a,char b,char c)//#将a借助bC:\Users\Administrator\Desktop\QQ图片20210218152418.jpg移动到c上
{
      if(n==1)
      {
                printf("将圆盘从%c移动到%c\n",a,c);
      }
      else
      {
                hanoi(n-1,a,c,b);//将a借助C移动到b上,a,b,c是标识符,'a','b','c'才是盘子
                printf("将一个圆盘从%c移动到%c\n",a,c);
                hanoi(n-1,b,a,c);//将b借助a移动到c上
      }
}
int main()
{
      int num;
      printf("输入圆盘个数:");
      scanf("%d", &num);
      hanoi(num,'X','Y','Z');
      
      return 0;
}C:\Users\Administrator\Desktop\HTML\QQ图片20210218152418.jpg
C:\Users\Administrator\Desktop\HTML\QQ图片20210218152626.jpg

HaibaraA1 发表于 2021-2-18 18:16:18

李宜文1 发表于 2021-2-18 15:29
#include
void hanoi(int n,char a,char b,char c);



好吧其实我的主要疑惑是为什么if语句框的语句会被执行那么多次,执行条件不是n==1吗?

吃甲鱼的小乌龟 发表于 2021-2-19 18:28:10

if语句只会被执行一次啊,注意else的第三行也有一个printf

HaibaraA1 发表于 2021-2-20 02:14:22

吃甲鱼的小乌龟 发表于 2021-2-19 18:28
if语句只会被执行一次啊,注意else的第三行也有一个printf

我为了区别特意在if那写的是"将圆盘...",而在else那写的是"将一个圆盘...",但是比如输入n=3,看执行结果if被执行了4次

吃甲鱼的小乌龟 发表于 2021-3-8 20:10:23

HaibaraA1 发表于 2021-2-20 02:14
我为了区别特意在if那写的是"将圆盘...",而在else那写的是"将一个圆盘...",但是比如输入n=3,看执行结 ...

if确实不止执行一次,注意每次调用hanoi函数到最后必定执行一次if语句(因为n必定会减到1),也就是说调用了几次hanoi函数就执行了几次if,比如你输入n=3那就是一共调用了4次hanoi函数,还是不懂的话就在纸上一步一步执行一下n=3的情况,观察一共调用了几次hanoi函数即可
页: [1]
查看完整版本: 一个求解汉诺塔的程序,麻烦复制执行下..看不懂运行原理