鱼C论坛

 找回密码
 立即注册
查看: 2642|回复: 5

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

[复制链接]
发表于 2021-2-18 14:36:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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框中形参的位置改变的意义是啥..
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-19 18:28:10 | 显示全部楼层
if语句只会被执行一次啊,注意else的第三行也有一个printf
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-20 02:14:22 From FishC Mobile | 显示全部楼层
吃甲鱼的小乌龟 发表于 2021-2-19 18:28
if语句只会被执行一次啊,注意else的第三行也有一个printf

我为了区别特意在if那写的是"将圆盘...",而在else那写的是"将一个圆盘...",但是比如输入n=3,看执行结果if被执行了4次
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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函数即可
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-9 14:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表