汉诺塔问题

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值