120423创作
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
#include < time.h >
#include < math.h >
#include < stdbool.h >
int count = 0;//统计进行多少步初始化,必须在这里
void move(char a, char b)
{
count++;//每进行一次move函数,count+1,统计次数
printf("将柱子%c上盘子移动至柱子%c上\n",a,b);
//基本步骤盘子在柱子之间的移动
}
int hano(int n,char x,char y,char z)
{
if (n == 1)
{
move(x, y);//循环步骤,else中n-1最终n=1,循环到这里,进行基本
//步骤move,并且打印出来
}
else
{
hano(n - 1, x, z, y);//将n个盘子上n-1个盘子移动到辅助柱子上
move(x, y);//将第n个盘子移动到目标柱子
hano(n - 1, z, y, x);//将辅助柱子上n-1个盘子移动到目标柱子完成任务
//将汉洛塔问题拆分成简单的三步,其中第1,3步中,是一种递归思维
//n-1个盘子拆分成n-2哥盘子,再包含三步递归,直到n=1。
}
return count;//统计次数
}
int main()
{
int i = 0;
printf("现进行汉洛塔数据分析,请输入盘子数量:" );
scanf("%d", &i);
char A = 'A';
char B = 'B';
char C = 'C';
int c = hano(i,A,B,C);//返回值是count得到步数
printf("移动顺序如上所示,一共需要%d步完成操作", c);
return 0;
}