浅谈汉诺塔问题,以及对其递归的分析

标题 浅谈汉诺塔问题,以及对其递归的分析

首先谈谈汉诺塔这个问题,这个问题是印度的一个古老的传说。开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。面对庞大的数字(移动圆片的次数)18446744073709551615,看来,众僧们耗尽毕生精力也不可能完成金片的移动。后来,这个传说就演变为汉诺塔游戏。

作为一个green hand,拿到这题的时候我是有些茫然的,感觉无从下手,没有什么思路。然后我就随手画了3个柱子,3个盘子。没一会就成功了,但这并没有真正的成功,因为我的这次成功是慢慢的尝试出来的。后来我就多画了几个盘子,慢慢尝试,总结其中的规律,经过一下午的探索,也算有了一点浅薄的心得,下面我就来谈谈。

很明显,这个问题需要用到递归才能解决,而用到递归的问题,往往可以使其简单化,把一个复杂的问题转化为一个个相似而简单的小问题。而这,也正是其中之一的难点,首先要想到怎么转化这个复杂的问题。经过一系列的尝试后,我发现,要想解决这个问题,你总是要把最大的盘子上的小盘子想办法移到中间的柱子上,然后再将最大的那个移到最后的一根柱子上,至此,也就发现了其中的共性点。

下面给出图示,以便理解

**在这里插入图片描述
在这里插入图片描述在这里插入图片描述

这其中最重要的一步就是一定要将最大的一个盘子移到c柱上,下面谈谈我对这一步重要性的理解。其实想到这时,我不禁想到了线性代数上行列式的计算,如果要计算一个4阶行列式,显然是很复杂的,但我们可以利用代数余子式将其转化为几个3阶行列式的和,这样就简便了运算。

这个问题中也是用到了同样的思想,当把最大的单独移到最后一个柱子上时,那样我们就不需要考虑那个盘子了,因为那个盘子是所有盘子中最大的,然它此时正在最下面,所以如图5个盘子的问题,当到图2那一步后,也就转化为4个盘子的问题.

此时也就成了这样在这里插入图片描述

此时又可以转化一下思维,我们不妨将A,B,C三个柱子换下顺序,因为这样并不会影响结果。

在这里插入图片描述

此时5个盘子的问题就转化成4个盘子的问题了,以此方法类推,最后就可以解决汉诺塔的问题了。

以上是整个问题的算法,以及是如何想到的,接下来就是写程序了

void move(char c1, char c2);
void hannuo(int n, char x, char y, char z)
{if (n == 1)move(x, z); //递归截止条件else{hannuo(n - 1, x, z, y);//将 n-1个盘子先放到B座位上move(x, z);//将A座上地剩下的一个盘移动到C盘上hannuo(n - 1, y, x, z);//将n-1个盘从B座移动到C座上}
}
void move(char c1, char c2)
{printf("%c--->%c\n", c1, c2);
}int main()
{int n;printf("input your number");scanf("%d", &n);hannuo(n, 'a', 'b', 'c');return 0;
}

#下面来分析下这个代码里面的递归部分
在这里插入图片描述

然后我用代码运行了一下,验证了一下分析,与分析完全一致.

在这里插入图片描述

其实我个人觉得做这种递归的题目一开始要研究的透彻一些,往后题目做多了,代码见多了,有一定的经验了,其实没必要像上面分析的这么细致,因为那时已经大致培养出了一种感觉了,不需要这样仔细的分析了.

最后,也到这,也就到了尾声了,这是我第一次写博客,希望各位老铁可以给个赞,关注一下,希望多年后看到这篇博客时可以说一句,年少的感觉真好啊!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/53741.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

逻辑训练--经典汉诺塔问题(C和JAVA递归实现)

一.汉诺塔问题 1.汉诺塔问题的来源 源自古印度的汉诺塔游戏,具体相传来源,可自行搜索 2.汉诺塔问题的意义 有人觉得,汉诺塔是一个非常无聊的问题,只有一个盘子的时候,直接移动就完成了,两个盘子的时候也…

程序员的数学课15 递归:如何计算汉诺塔问题的移动步数?

递归是重要的程序开发思想,比如程序源代码缩进、树形数据结构、XML 语法、快速排序法等都有递归的影子。 那么,递归思维的本质到底是什么呢?递归的理念看似隐讳,实则非常清晰明了。 为了让你由浅入深地理解它,这一讲…

程序员的底层思维:逻辑思维

更多关于思维能力的内容,尽在我的新书《程序员必备的思维能力》 “你讲话要有逻辑!” “你这逻辑不对!” “你的底层逻辑是什么?” “说说你的逻辑思维能力体现在哪儿?” 在日常交流中,我们会频繁的使用…

《经典递归问题:汉罗塔》

🌠作者:TheMythWS. 🎆专栏:《JavaSE》 🎇座右铭:不走心的努力都是在敷衍自己,让自己所做的选择,熠熠发光。 目录 ✨汉罗塔的介绍 图解游戏​ ✨N层汉罗塔需移动的次数 ✨汉罗塔的…

用类比方式学习编程中函数递归(个人理解仅供参考)(内含汉诺塔问题的求解)

目录 1.前言 2.递归的数学模型 3.相关的c语法 4.将递归的数学模型写成编程语言 5.利用类比方法将实际问题的代码写成函数递归的形式 例1: 例2: 6.汉诺塔问题的求解 1.前言 本人在学习函数递归编程方法的过程中,发现用类比的方式学习递归法可帮助我们在各种编…

我想,有间花房

你带我走进你的花房,我无法逃脱花的清香,我不知不觉忘记了方向,你说我世上最坚强,我说你世上最善良,你不知不觉和花儿一样 也许每一位 爱花的姑娘,都想有一间属于自己 的花 房 ,在悠闲的午后&am…

花房集团CEO于丹内部信:上市即暴富年代已一去不复返

雷递网 乐天 12月12日 花椒母公司花房集团(股票代码为:“03611”)今日在港交所上市,发行价为2.8港元,募资净额为7240万港元。 花房集团开盘价为3.29港元,较发行价上涨17.5%;截至目前&#xff0c…

花房集团上市:市值超30亿港元 周鸿祎连收两个香港IPO

雷递网 雷建平 12月12日 花椒母公司花房集团(股票代码为:“03611”)今日在港交所上市,发行价为2.8港元,募资净额为7240万港元。 花房集团开盘价为3.29港元,较发行价上涨17.5%;截至目前&#xff…

花房集团上市,走向元宇宙新征程

12月12日,花房集团在港交所成功上市,首日便受到追捧,当日最高涨幅达28.75%。 继360、360数科、鲁大师后,这是“红衣教主”周鸿祎收获的第四个IPO。 花房集团作为直播界元老之一,两年内三次申请IPO,终于在…

花房集团:直播老将终赴IPO

寒冬之下,花房集团如何破局? 12月12日,直播界“元老”花房集团(下称“花房”,03611.HK)正式挂牌港交所。 花房此次IPO发行价为2.8港元/股,募资净额为7240万港元,开盘价为3.29港元/…

如果金融男和IT男同时追你,你选谁?

对于金融女心仪对象排行榜的前两名, 金融男和IT男的地位是不可动摇了, 要说两个行业的不同之处 , 最大的区别在于一个是经济领域, 一个是产业领域 而另一个区别呢? 当然是从事这两种行业的人群不同啦, 具…

会泡妞的程序员都是怎么撩妹子的?

来自:这个好玩吗 链接:https://www.cnblogs.com/lzjtdxfxl/p/5493039.html 传说,每一个程序员上辈子都是折翼的天使 身体好、智商高、逻辑思维能力强 挣得多、花得少、死得还比对方早 王者级的程序员是有情怀的 在他(她&#xff0…

软考必备资料大放送,全科目软考资料都给你备好了!

软考作为IT领域的国家级证书 可以积分落户、评职称、抵个税…含金量高 现在有越来越多的人加入了软考的备考大军 新一轮的软考考试马上要开始了 你准备好了吗? 下面是给大家整理好的软考备考资料包 上面展示的资料只是冰山一角,软考科目众多&#…

【广工考试笔记】计算机网络考试速成笔记

范围 网络协议,服务 网络四层协议的功能与包含的协议 数据链路层 差错检测 ,物理地址,以太网,局域网的扩展, 物理层 数据传输速度,频率,波长,速度,编码 网络层&…

《软考填涂答题卡须知》

考试临近,今天主要是给大家说下答题卡的填涂注意事项,希望考生们看完后可以避免一些小失误。除信息处理技术员和多媒体应用制作技术员采取笔试与上机操作考试相结合的形式外,其他各种考试都采用笔试形式。考试实行全国统一大纲、统一试题、统…

考试管理系统

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字): 模块划分:老师模块、班级模块、学生模块、课程模块、试题模块、试卷模块、 组卷模块、考试模块、答题模块 管…

【CSP考前复习】关于考试时的注意事项

前言 作为一名已经服役4年的老年OI选手,经历过的考试已经是数以百计了。在这么多次考试中,爆零垫底是常有的事,运气好了靠暴力得到好名次的事也经常发生。那么,CSP临近,我想有必要好好整理一下这些问题和经验。 一、…

CKA OFFCIAL TEST准备工作考试说明练习题

文章目录 1. 准备工作1.1 证书详情1.2 考试注意事项 2. 考试说明2.1 考试环境2.2 考试期间允许的资源2.3 考试技术说明2.4 可接受的测试地点2.5 其他资源2.A 考试小提示 3. 练习题Task 1. RBAC - role based access control(4/25%)Task 2. drain - highl…

CCNA考试流程、考试费用及考场介绍

4月15日CCNAHCIA新一轮班级开班 CCNA(Cisco Certified Network Associate)思科认证网络工程师 一、CCNA认证考试流程 ccna考试认证,先学习CCNA理论知识,然后下载CCNA考试题库,预约考试,参加并通过考试。 C…

股票ctp交易接口是什么?

股票ctp交易接口是什么?CTP接口除官方发布的C动态库外,很多人也提供了Python、Java、C#等各主流语言的接口,可搜索相应的开发方法。一个连接能够查询的股票数量是有限的,性能也不高,但是可以创建多个api实例并发工作&a…