汉诺塔

汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

如图:
在这里插入图片描述

#include<stdio.h>
void Hanoi(int n,char a,char b,char c);
void Move(int n,char a,char b);
int main()
{
	int n;
	printf("Input the number of disks:");
	scanf("%d",&n);
	printf("Steps of moving %d disks from A to B by means of C:\n",n);
	Hanoi(n,'A','B','C');	//将n个圆盘借助c由A已到B 
	return 0;
}
/*函数功能:用递归方法将n个圆盘借助柱子C从原柱子a移动到目标柱子b上*/
void Hanoi(int n,char a,char b,char c)
{
	if(n==1)
	{
		Move(n,a,b);	//将第n个圆盘由a移动到b	
	}
	else
	{
		Hanoi(n-1,a,c,b);	//将第n-1个圆盘借助柱子b由a移动到c 
		Move(n,a,b);		//第n个圆盘由a移动到b 
		Hanoi(n-1,c,b,a);	//将第n-1个圆盘借助a由c移动到b 
	}
}
/*函数功能:将第n个圆盘由原柱子a移动到b*/
void Move(int n,char a,char b)
{
	printf("Move %d:from %c to %c\n",n,a,b);
}

总结:
1.当问题的解决过程有明显的相似的结构时(类似循环,但内容和循环次数不确定(简单来说循环不好解决)),可以使用递归思想。
2.递归可以将规模较大的过程缩减,考虑得到结果的n-1步,再依照条件考虑n-2步的条件…直到第一步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值