汉诺塔递归 C语言 代码简洁
作者:互联网
#include<stdio.h>
void hannuota(int n,char A,char B,char C)
{
if(1==n) printf("将编号为%d的盘子从%c柱子移动到%c柱子\n",n,A,C);
else
{
hannuota(n-1,'A','C','B');
printf("将编号为%d的盘子从%c柱子移动到%c柱子\n",n,A,C);
hannuota(n-1,'B','A','C');
}
}
int main()
{
char ch1='A';
char ch2='B';
char ch3='C';
int n;
printf("请输入要移动盘子的个数:");
scanf("%d",&n);
hannuota(n,'A','B','C');
return 0;
}
汉诺塔自然语言:
如果是1个盘子(考虑特殊情况
直接将A柱子上的盘子从A移动到C
否则
先将A柱子上的n-1个盘子借助C移动到B
直接将A柱子上的盘子从A移动到C
最后将B柱子上的n-1个盘子借助A移动到C
思考:
1> 今天再次看这个代码,缓了一会有点懵(没看懂输出,原来输出也是在递归里,所以先看到的输出代码是最后输出的,即一直递归下去,最后递归到n==1的时候先输出if(1==n)的那行代码(没毛病,整个人顺畅了))
2>再次遇到递归的题目的时候,可以按照这个思路,先把自然语言写出来,再代码实现。
如果直接写代码的话,我可能会陷入递归思路的不解之中(菜勿喷),对着自然语言直接写代码,不用管里面的递归逻辑就很nice
汉诺塔是看郝斌老师学习的,上图的最后一句话!
(郝斌老师汉诺塔-> 【郝斌】-数据结构入门_哔哩哔哩_bilibili)
标签:柱子,递归,代码,C语言,char,汉诺塔,盘子 来源: https://blog.csdn.net/nahnah_/article/details/122275382