其他分享
首页 > 其他分享> > 汉诺塔递归 C语言 代码简洁

汉诺塔递归 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