ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

算法基础:汉诺塔--递归

2021-02-16 18:02:32  阅读:174  来源: 互联网

标签:移到 递归 -- Hanoi char int 汉诺塔 盘子 移动


题目:
古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图)。有一个和尚想把这64个盘子从A座移到C座,但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。在移动过程中可以利用B座,要求输出移动的步骤。
汉诺塔

#include <iostream>
using namespace std;
void Hanoi(int n,char src,char mid,char dest)
//将src座上的n个盘子,以mid座为中转,移动到dest座
{
	if(n==1){//只需移动一个盘子
		cout<<src<<" -> "<<dest<<endl;
		return ;
	}
	//先将n-1个盘子从src移动到mid
	Hanoi(n-1,src,dest,mid);
	//再将一个盘子从src移动到dest
	cout<<src<<" -> "<<dest<<endl;
	//最后将n-1个盘子从mid移动到dest
	Hanoi(n-1,mid,src,dest);
	return ;
}
int main()
{
	int n;
	cin>>n;
	Hanoi(n,'A','B','C');
	return 0;
}

分析:
1.只要想到递归思路就很简单了,因为它的做法就是相同的,先把n-1个移到中间 然后把最底下的移到右边,再把n-2个移到左边 再把中间最底下的移到右边 就像套娃一样。
2.最后要把终止条件找出 就是只有一个的时候。

标签:移到,递归,--,Hanoi,char,int,汉诺塔,盘子,移动
来源: https://blog.csdn.net/qq_46470984/article/details/113826704

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有