汉诺塔

来源:互联网 发布:unix网络编程卷1 源码 编辑:程序博客网 时间:2024/06/04 18:52
//*******************
//汉诺塔
//第一个参数 : 起始的柱子有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
原创粉丝点击