#include
//可以将解决汉诺塔问题的过程分解成可递归的3个子过程:
//步骤1: 将n-1个盘子从初始塔x 通过目标塔z 放到停留塔y
//步骤2: 将第n个盘子从初始塔x 通过停留塔y 放到目标塔z(这里只是一个盘子的移动,所以不能进行递归)
//步骤3 将n-1个盘子从停留塔y 通过初始塔x 放到目标塔z
int i=1;//记录步数
void move(int n,char x,char z) //函数move把n号盘子 从初始塔x 放到目标塔z 并打印出来
{
printf("第%d步:将%d号盘子%c---->%c\n",i++,n,x,z);
}
void hanoi(int n,char x,char y,char z)
{//只有一个盘子的时候只需要步骤1所以 n==1可以当递归调用的限制条件
if (n==1)
move(1,x,z);//只有一个盘子就把盘子从初始塔x 放到目标塔z(不需要使用停留塔)
else
{
hanoi(n-1,x,z,y);//步骤1:
move(n,x,z); //步骤2:
hanoi(n-1,y,x,z);//步骤3:
}
}
int main()
{
printf("请输入盘子的个数:\n");
int n;
scanf("%d",&n);
char x='A',y='B',z='C';//定义了三个塔初始塔X 停留塔y 目标塔z
printf("盘子移动情况如下:\n");
hanoi(n,x,y,z);// (n个盘子,初始塔x,停留塔y,目标塔z)传入目标
}
/*本人作为初学者对初学者第一次看见此程序遇到的坑
此程序并没有使用过多的 赋值 和 关键字 的应用,我就不知道这个程序怎么就可以运行了
因为c语言是一门面向过程的语言 我们把(做什么)设计成函数 (怎么做)是计算机的事
汉诺塔问题(怎么做)的解析和和(做什么)设计步骤可上b站搜索"懒猫老师-c语言-汉诺塔问题"
*/