递归-汉诺塔

作者: 黄一倚 | 来源:发表于2018-08-01 18:07 被阅读1次

    问题描述

    算法复杂度

    • 2的n次方再减1
      n为盘子的个数

    算法实现

    #include <stdio.h>
    #include <stdlib.h>
    
    /**
        汉诺塔问题
    */
    void hanoi(int n,char A, char B, char C){
        if(1==n) //如果是一个盘子,直接将盘子从A柱子移到B柱子上
            printf("将编号为%d的盘子从柱子%c移到柱子%c\n",n,A,C);
        else{
            hanoi(n-1,A,C,B); //将A上的n-1个盘子借助C移到B
            printf("将编号为%d的盘子从柱子%c移到柱子%c\n",n,A,C); //直接将A柱子上的第N个盘子移到C柱子上
            hanoi(n-1,B,A,C); //将B柱子上的n-1个盘子借助A移到C
        }
    }
    
    int main()
    {
        //模拟三个柱子
        char chA='A';
        char chB='B';
        char chC='C';
        //盘子个数
        int n;
        printf("请输入需要移动盘子的个数:");
        scanf("%d",&n);
        hanoi(n,chA,chB,chC);
        return 0;
    }
    
    

    运行结果

    3个盘子

    2个盘子

    1个盘子

    5个盘子

    相关文章

      网友评论

        本文标题:递归-汉诺塔

        本文链接:https://www.haomeiwen.com/subject/ogjrvftx.html