基于C语言用递归算法实现汉诺塔解法的计算


基于C语言用递归算法实现汉诺塔解法的计算
如有不懂欢迎提问

/***************************************************************
三根柱A(用0表示),B(用1表示),C(用2表示),起始A,目标C
***************************************************************/
#include<stdio.h>
//全局变量steps记录步数
int steps = 0;


//传入碟子号num,从get位移到put位
void print(int num, int get, int put) {
    steps++;
    printf("move disk%3d from %c to %c\n", num, get == 0 ? 'A' : get == 1 ? 'B' : 'C', put == 0 ? 'A' : put == 1 ? 'B' : 'C');
    //get == 0 ? 'A' : get == 1 ? 'B' : 'C' 理解为 若get==0,则'A',否则若get==1,则'B',否则'C',实际上是将012与ABC对应
}


//递归函数,传入碟子号num,abc为三根柱子号,不一定对应ABC柱
void mv(int num,int a,int b,int c) {
    if (num == 1)
        print(1, a, c);
    else {
        mv(num - 1, a, c, b);
        print(num, a, c);
        mv(num - 1, b, a, c);
    }
}


//主函数,程序从这里开始运行
int main() {
    //碟子数n
    int n;
    printf("Input the number of disks:");
    scanf("%d", &n);
    printf("The setps to moving %3d disks:\n",n);
    mv(n, 0, 1, 2);
    printf("Complelt in %d steps!\n",steps);
    return 0;
}

结果展示


文章作者: BoyInTheSun
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 BoyInTheSun !
 上一篇
Linux安装autosub踩坑“ERROR: Package 'cachetools' requires a different Python: 2.7.13 not in '~= 3.5'” Linux安装autosub踩坑“ERROR: Package 'cachetools' requires a different Python: 2.7.13 not in '~= 3.5'”
今天心血来潮,想在Debian上安装autosub,项目地址:https://github.com/agermanidis/autosub这是一个自动语音转文字的软件,基于python编写,以后有机会再介绍用法。 安装autosub:
2020-03-18
下一篇 
基于C语言用递归算法实现马踏棋盘解法的计算 基于C语言用递归算法实现马踏棋盘解法的计算
基于C语言用递归算法实现马踏棋盘解法的计算如有不懂欢迎提问 #include<stdio.h> #define X 7//棋盘x #define Y 7//棋盘y #define A 1//起始横坐标 #define B 1//起始
2020-03-17
  目录