深入理解函数递归(汉诺塔问题详解)

汉诺塔问题

  • 汉诺塔问题描述
  • 算法步骤
    • 三阶汉诺塔为例
  • 函数递归
    • 什么是递归
    • 递归的两个必要条件
  • 解决方法
  • 代码演示

汉诺塔问题描述

有一种被称为汉诺塔(Hanoi)的游戏,该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘。
游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。
操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。
在这里插入图片描述

算法步骤

三阶汉诺塔为例

在这里插入图片描述
一共需要7步

函数递归

什么是递归

我的理解就是函数自己调用自己就是递归。
史上最简单的递归

//史上最简单的递归int main()
{//注意这里的递归是一个死递归//main  函数调用  main 函数main();return 0;
}

书中定义的递归概念:
程序调用自身的编程技巧称为递归( recursion)。
递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,
递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。
递归的主要思考方式在于:把大事化小

递归的两个必要条件

(1)存在限制条件,当满足这个限制条件的时候,递归便不再继续。
(2)每次递归调用之后越来越接近这个限制条件。

解决方法

当n=1时,只要将编号为1的圆盘从柱子A直接移到柱子C上即可。
当n>1时,就需要借助另外一根柱子来移动。将n个圆盘由A移到C上可以分解为以下几个步骤:
(1) 将A柱子上的n-1个圆盘借助C柱子移到B柱子上;
(2) 把A柱子上剩下的一个圆盘从A柱子移到C柱子上;
(3) 最后将剩下的n-1个圆盘借助A柱子从B柱子移到C柱子上。
在这里插入图片描述

需要移动的次数
当n = 1时,F(1) = 1
当n = 2时,F(2) = 2 * F(1) + 1
当n = 3时,F(3) = 2 * F(2) + 1

在这里插入图片描述

代码演示

//汉诺塔问题   递归代码实现
#include <stdio.h>//移动盘子的函数
void move(char x, char y)
{printf("%c->%c\n", x, y);
}//汉诺塔递归函数
void hanoi(char A, char B, char C, int n)
{//递归的第一要素  结束的条件是当只有一个盘子时   直接从A柱移动到C柱上去if (n == 1){move(A, C);}else{//递归的第二个必要的条件    大事化小  一步一步逼近结束的条件//先将n-1个盘子从A柱通过C柱移动到B柱hanoi(A, C, B, n - 1);//然后将最后剩下的那一个盘子 从A柱直接移动到C柱move(A, C);//最后将B柱上的n-1个盘子通过A柱移动到C柱hanoi(B, A, C, n - 1);}
}int main()
{int n = 0;  //n用于记录一共有多少个盘子scanf("%d", &n);//汉诺塔问题解决函数hanoi('A', 'B', 'C', n);return 0;
}

结果显示
在这里插入图片描述
在这里插入图片描述

这里就是博主对汉诺塔问题的整体理解,希望能够给大家带来一些收获

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

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

相关文章

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

标题 浅谈汉诺塔问题&#xff0c;以及对其递归的分析 首先谈谈汉诺塔这个问题&#xff0c;这个问题是印度的一个古老的传说。开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒&#xff0c;第一根上面套着64个圆的金片&#xff0c;最大的一个在底下&#xff0c;其余一个比一个…

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

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

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

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

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

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

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

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

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

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

我想,有间花房

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

《软考填涂答题卡须知》

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

考试管理系统

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

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

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

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&#xff08;4/25%&#xff09;Task 2. drain - highl…

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

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