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


22年3月12日 又来 发现之前写的有问题

(已经改正确了,我之前把这里的ABC加上了' ')

 

递归函数里面的  形参不用加  '  '  

只有main里那个需要加 ' ',只是形参和实参一样了 ,有些迷惑性。改成

也可。  这样看来被调用函数内的参数是一类,所以不用加' '了 (x,y,z就是char类型)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值