- 1、本文档共102页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 例15 汉诺塔问题 据说在约十九世纪末欧洲的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下、由小到大顺序串着由 64 个圆盘构成的塔。 游戏的目的是将最左边A杆上的圆盘,借助最右边的C杆,全部移到中间的B杆上,条件是一次仅能移动一个盘,且不允许大盘放在小盘的上面。 64 片 初始杆 中间杆 目的杆 1 n 6 函数的递归调用 * 第1步,将问题简化。假设 A杆 上只有 2 个圆盘,即汉诺塔有 2 层,N=2。 A杆 C杆 B杆 移动方法:1. 将上面小片移到 C杆 上。 2. 将下面的大片由 A杆 移到 B杆 上。 3. 将 C杆 上的小片移到 B杆 上。 分析: 对A杆上的全部N个圆盘从小到大顺序编号,最小的圆盘为1号,次之为2号……则最下面的圆盘的编号为 N。 6 函数的递归调用 * A杆 C杆 B杆 第2步,对于一个有N(N1)个圆盘的汉诺塔,将N个圆盘分为两部分:上面的N-1个圆盘和最下面的 N号圆盘。将“上面的N-1个圆盘”看成一个整体。 第3步,为解决 N 个圆盘的汉诺塔,可按如下方式进行操作: ① 将A杆上面的N-1个盘子,借助B杆,移到C杆上; ② 将 A杆 上剩下的 N号 盘子移到 B杆 上; ③ 将 C杆 上的 N-1个 盘子,借助A杆,移到B杆上。 6 函数的递归调用 * 整理分析结果:把第1步中化简问题的条件作为递归 结束条件,将第3步分析得到的算法作为递归算法。 定义函数movedisc( n,fromneedle,toneedle,usingneedle)。 将 fromneedle 杆上的 N 个圆盘,借助 usingneedle 杆,移动到 toneedle 杆上。 6 函数的递归调用 * 移动N个圆盘的递归算法描述如下: movedisc ( n,fromneedle,toneedle,usingneedle ) { if ( n==1 ) 将 n 号圆盘从 fromneedle 上移到 toneedle; else { ① movedisc ( n-1,fromneedle,usingneedle,toneedle ) ② 将 n 号圆盘从 fromneedle 上移到 toneedle; ③ movedisc ( n-1,usingneedle,toneedle,fromneedle ) } } 6 函数的递归调用 * 程序 int i=0; /* 移动圆盘数量计数器 */ void main( ) { unsigned n; scanf (%d, n); movedisc ( n,’a’,’b’,’c’); /* 将A上的N个圆盘借助C将移动到B上 */ printf( \t Total: %d\n, i ); } void movedisc ( n, fromneedle, toneedle, usingneedle ) unsigned n; char fromneedle, toneedle, usingneedle; { if ( n == 1 ) printf(%2d-(%2d): %c == %c\n,++i, n,fromneedle,toneedle); else { movedisc ( n-1, fromneedle, usingneedle, toneedle ); printf(%2d-(%2d): %c == %c\n,++i, n,fromneedle,toneedle); movedisc ( n-1, usingneedle, toneedle, fromneedle ); } } 6 函数的递归调用 * 程序执行过程 当N=3时,程序递归调用的完整执行过程 在main函数中 递归调用第一层 递归调用第二层 递归调用第三层 递归 递归 ┎────→ move(1,a,b,c) ─→ 输出:1-(1):a==b ┃ ←─────── 返回递归第二层 ┃ 输出:2-(2):a==c 调用 ┃ move(1,b,c,a) ─→ 输出:3-(1):b==c ┎───→ move(2,
您可能关注的文档
- 高等数学:BIT 1-3 极限的性质.ppt
- 高等数学:BIT7-7 方向导数、偏导数、连续性关系.ppt
- 高等数学教学课件:BIT7-8.ppt
- 高等数学教学课件:BIT6-5.ppt
- 高等数学教学课件:BIT6-7.ppt
- 高等数学教学课件:BIT7-4 (2).ppt
- 高等数学:BIT8-2(直角坐标).ppt
- 丰田普拉多LAND CRUISER PRADO (发动机[1GR-FE]).ppt
- 丰田普拉多LAND CRUISER PRADO (底盘).ppt
- 高级语言程序设计基础(C&C++):模块1 计算思维引论.ppt
- 2024年江西财经职业学院高职单招交通运输类考试2018-2023年高频考点试题含答案解析.docx
- 2024年安徽电子信息职业技术学院高职单招财经类考试2018-2023年高频考点试题含答案解析.docx
- 2024年常州工程职业技术学院高职单招交通运输类考试2018-2023年高频考点试题含答案解析.docx
- 2024年江西青年职业学院高职单招财经类考试2018-2023年高频考点试题含答案解析.docx
- 2024年廊坊卫生职业学院高职单招计算机类考试2018-2023年高频考点试题含答案解析.docx
- 2024年武汉交通职业学院高职单招计算机类考试2018-2023年高频考点试题含答案解析.docx
- 2024年永州师范高等专科学校高职单招计算机类考试2018-2023年高频考点试题含答案解析.docx
- 2024年汕头职业技术学院高职单招计算机类考试2018-2023年高频考点试题含答案解析.docx
- 2024年江西师范高等专科学校高职单招计算机类考试2018-2023年高频考点试题含答案解析.docx
- 2024年娄底职业技术学院高职单招计算机类考试2018-2023年高频考点试题含答案解析.docx
最近下载
- 《中国绝经管理与绝经激素治疗指南2023版》解读PPT 课件.pptx VIP
- 小学文言文阅读训练题50篇含答案.pdf
- 2024年中国低空行业经济报告:蓄势待飞,展翅万亿新赛道.pdf
- 山西省全省各地区煤矿分布图.pdf
- 小学数学五年级下册第三单元《分数乘法》作业设计.pdf VIP
- 室上性心动过速诊断及治疗中国专家共识2021要点解读.pptx
- 2022年山东省新高考地理和答案.pdf VIP
- 绝经管理与绝经激素治疗临床应用指南解读.pptx VIP
- 2024年新高考统编版政治高频主观题生成性答题术语(实用!).docx
- 【国开搜题】国家开放大学 一网一平台20230512计算机系统与维护04期末考试押题试卷.docx VIP
文档评论(0)