- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
湘潭大学数据结构课件pptCh01Introduction精选
这两个程序演示了最简单的递归调用。当执行fib(4)时,将会有如图所示的过程。 这两个程序虽然简单,却显示了使用递归过程的一般规则: (1)要解决的问题需要使用到解法相同的同类子问题的答案 (2)问题应该能向简单的方向分解 (3)问题最终能分解成能直接解决的子问题 (4)递归过程与原问题递归的定义相一致。 2. 数据结构是递归的 某些数据结构就是递归的。单链表的整个结构就是一个递归结构,如图 单链表的递归结构可如下定义: (1)一个由数据项和指针项组成的数据结构。 (2)其指针为NULL,或指向一个单链表。 继续考虑单链表 删除非空单链表中最后一个结点,可以利用递归形式: int delLast(ListNode *f) { if (f-link==NULL){ /* 判断是否末结点 */ delete(f); return 0;} /* 末结点返回0 */ else if (delLest(f-link)==0) /* 递归调用 dele */ f-link=NULL; /* 将末结点的前一结点指针设为NULL */ return 1; /* 非末结点返回 1 */ } 递归在处理多种数据结构时都经常会运用,树也是一种递归的数据结构。关于树这种数据结构的许多算法,都将用到递归。 3. 问题的解法是递归的 有的问题本身不是递归的,但使用递归的方法将有助于解决这种问题。 考虑以下的这种情况:有一组人,他们的身高是已知的,目标是判断这组人之中是否有同样身高的人。 算法如下: int if_same(int height[],int n) { int i=0; while (i n-1) /* height[n-1]分别与height[0]~height[n-2]比较 */ if (height[n-1]==height[i]) return 1; /* 有相同值则停止比较,返回1 */ return if_same(height,n-1); /* 递归调用if_same,对剩下n-1个数进行操作 */ } 递归过程和递归工作栈 递归过程中牵涉到很多过程的调用,比如在计算排列组合的程序中需要计算阶乘,主程序就需要调用factorial() 。 只有确保递归程序的每次调用的值都返回到正确的位置,才能使递归程序顺利进行,并保证最后外调用的返回值正确。在每次递归过程调用时,必须做参数保存、参数传递等工作。 如图所示的栈内存放的是每一层递归调用所需保存信息构成的一个工作记录。 递归的应用 1. 汉诺塔问题(Tower of Hanoi) 2. 迷宫问题的递归算法 3. 背包问题 问题:有3个柱子(1,2,3)和3个不同尺寸的圆盘(A,B,C)。在每个圆盘的中心有个孔,所以圆盘可以堆叠在柱子上。最初,全部3个圆盘都堆在柱子1上:最大的圆盘C在底部,最小的圆盘A在顶部。要求把所有圆盘都移到柱子3上,每次只许移动一个,而且只能先搬动柱子顶部的圆盘,还不许把尺寸较大的圆盘堆放在尺寸较小的圆盘上。 归约过程 (1)移动圆盘A和B至柱子2的双圆盘难题; (2)移动圆盘C至柱子3的单圆盘难题; (3)移动圆盘A和B至柱子3的双圆盘难题。 由上可以看出简化了的难题每一个都比原始难题容易,所以问题都会变成易解的本原问题。 * 数据结构与算法分析Data Structures and Algorithm Analysis 朱 江snowr1221@ 教材及参考文献 教材 数据结构与算法分析:C语言描述(原书第2版),Mark Allen Weiss著,冯舜玺译,机械工业出版社 参考文献 《数据结构》,陈越、何钦铭、徐镜春、魏宝刚、杨枨 编著,高等教育出版社 地位:是计算机及相关专业的一门专业基础课。 研究内容: 在计算机中如何有效地表示数据 如何合理地组织数据和处理数据 算法设计和算法性能分析技术 要求: 对计算机的组成有基本的了解 程序设计方法 C语言 对涉及离散数学的知识,如表、树、图、集合等,有初步的了解。 作用: 为软件开发和程序设计提供了必要的技能训练 为后续的专业课程,如数据库系统、操作系统、编译原理等,打下良好的知识基础 【定义】“数据结构是计算机中存储、组织数据的方式
您可能关注的文档
- 湖北省武汉市武昌区七校联考2015-2016学年八年级(上)期中数学试卷(学生版).doc
- 湖北省土地整治工程施工统一用表精选.doc
- 石油地质学复习资料剖析.doc
- 湖北省武汉市部分重点中学2014-2015学年高一下学期期中考试政治试题精选.doc
- 湖北省武汉市武昌区七校2015—2016学年度第一学期期中联合测试七年级数学试卷精选.doc
- 湖北省武汉市2015届高中毕业生四月调研测试文综历史试题Word版含答案精选.doc
- 湖北省洪湖市2013-2014学年七年级下学期期中文化素质检测生物试题精选.doc
- 湖北省武汉市武昌区2014-2015学年度高二第二学期期末调研考试政治试题精选.doc
- 湖北省科协课题申报精选.doc
- 湖北省荆州市2014-2015学年高二下学期期末考试政治试题精选.doc
文档评论(0)