基于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;
}