汉诺塔

//*******************
//汉诺塔
//第一个参数 : 起始的柱子有N个盘子
//第2-4个参数, 分别是a表示起始柱子,b表示中转柱子, c表示目的地
//第2-4个参数的寓意会发生改变的例如hannuota(n-1, a, c, b);
//有n-1个盘子, 起始位置为a, 中转为c, 目的是b;
/*
 以 n = 2 为例,
 int a = 'a', b = 'b', c = 'c';
 hannuota(2, a, b, c);
 
 执行过程分别为 :
 1, hannuota(2-1, a, c, b); -> 2, printf("%c---->%c \n", a, c);
 3, hannuota(2-1, b, a, c);
 
 // 首先要把hannuota(n-1, a, c, b)的递归执行完毕后, 才会去执行hannuota(2-1, b, a, c); 这个递归函数 .
 hannuota(1, a, c, b) 由于此处的实参是: 1, a, c, b 形参则接收(隐式接收)
 形参是void hannuota(int n, char a, char b, char c) 
                    n = 1    a = a   b = c  c = b;
 {
    if (n > 0)
    {
        if (1 == n)
        {
            printf("%c---->%c \n", a, c);
        }
 }
 //所以第一句打印的是
 
 输出结果 :
 a---->b
 a---->c
 b---->c
 
  */
void hannuota(int n, char a, char b, char c)
{
    if (n > 0)
    {
        if (1 == n)
        {
            //直接把 a的东西挪到c
            printf("%c---->%c \n", a, c);
        }
        else
        {
            // c作为中转, 把a的东西移到b
            hannuota(n-1, a, c, b);
            printf("%c---->%c \n", a, c);
            
            // a作为中转, 把b的东西移到c
            hannuota(n-1, b, a, c);
        }
    }
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值