一个求解汉诺塔的程序,麻烦复制执行下..看不懂运行原理
#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框中形参的位置改变的意义是啥..
#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 李宜文1 发表于 2021-2-18 15:29
#include
void hanoi(int n,char a,char b,char c);
好吧其实我的主要疑惑是为什么if语句框的语句会被执行那么多次,执行条件不是n==1吗? if语句只会被执行一次啊,注意else的第三行也有一个printf 吃甲鱼的小乌龟 发表于 2021-2-19 18:28
if语句只会被执行一次啊,注意else的第三行也有一个printf
我为了区别特意在if那写的是"将圆盘...",而在else那写的是"将一个圆盘...",但是比如输入n=3,看执行结果if被执行了4次 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]