经典递归(汉诺塔问题)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int i = 1;//记录步数
void Move2 (int n, char a, char c)//将编号为n的盘子由a移动到c
{
printf("%d步:将第%d个盘子由%c—>%c\n", i++, n, a, c);
}
void Move1 (int n, char a, char b, char c)//将n个盘子由初始塔a移动到目标塔c
{
if (n == 1)
{
Move2(1, a, c);//只有一个盘子是直接从a移动到c
}
else
{
Move1(n - 1, a, c, b);//将初始塔a前的n-1个盘子借助目的塔c移动到借用塔b上
Move2(n, a, c);//将剩下的一个盘子移动到目的地塔c上
Move1(n - 1, b, a, c);//最后将借用塔b上n-1个盘子移动到目的塔上
}
}
int main()
{
printf(“请输入盘子的个数”);
int n;
scanf("%d", &n);
char x = ‘A’, y = ‘B’, z = ‘C’;
printf(“盘子移动情况如下:\n”);
Move1(n, x, y, z);
system(“pause”);
return 0;
}

运行结果如下
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/belongHWL/article/details/90217081