- 1、本文档共27页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构与算法分析-4
5.1.1 递归的概念 一、递归的定义 递归是一个数学概念,递归函数即自调用函数,在函数体内直接或间接地自己调用自己。递归本质上也是一种循环的程序结构,它把“较复杂”的计算逐次归结为“较简单”的计算,一直归结到“最简单”的情形的计算,并得到计算结果为止。 二、用递归求解问题的条件 1. 必须有一个明确的函数终止的条件; 2. 原问题必须能转化为新问题,新问题的解决方法与旧问题的解决方法一样; 3. 新旧问题一般在形式参数每次获得的值上不一样,或者函数体内测试条件变量的值不同。 注意:很多数据结构可以采用递归方式定义,线性表、数组、字符串和树等数据结构原则上都可使用递归方法来定义。 使用递归定义方法的数据结构常称为递归数据结构,例如树形结构。 三、递归算法举例 例1:斐波那契级数 它的定义可递归定义如下: F0=0 F1=1 Fn=Fn-1+Fn-2 (n1) 其递归算法如下: long Fib(long n) { if (n=1) return n; else return Fib(n-2)+Fib(n-1) } 说明: 1.在函数Fib中,当n1时,又调用了函数Fib自己,但是形式参数变为当前参数值n的减2和减1,新问题的解决与原问题的解决方法一样,但新问题的解决比原问题更趋向于简单,因为形式参数在减小。当形式参数n=1时,递归将终止,返回当前n的值。 2.函数的递归方式有两种: (1)直接递归方式:P-P,即在函数P的函数体内有语句直接调用函数P。 以上的Fib函数就是一个直接递归函数 (2)间接递归方式:P-Q-P,即在函数P的函数体内有语句调用函数Q,而在函数Q的函数体内又有语句调用函数P,这样考察函数P,就是通过函数Q间接地调用自己,这就是间接递归方式,本章不考虑此类递归。 5.1.2 递归过程 一、递归算法的优点 程序非常简洁而清晰,并且易于分析,可读性较强。 二、递归算法的缺点 (1)费空间:系统实现递归需要一个系统栈,用于在程序运行时间处理函数调用。系统栈是一块特殊的存储区。当一个函数被调用时,系统创建一个工作记录,称为栈桢(stack frame),并将其置于栈顶。初始时只包括返回地址和指向上一栈的指针。当该函数调用另一个函数时,该函数的局部变量、参数将加到它的栈桢中。一旦一个函数运行结束,将从栈中删除它的栈桢,程序控制返回原调用函数继续执行下去。 例如:main() 函数调用函数a1,图5-1(a)表明了main()函数系统栈,而图5-1(b)是包括函数a1的系统栈。 (2) 费时:局部变量、形式参数和返回地址的进栈、出栈以及参数的传递需要费时,而且递归中的重复计算也很浪费时间。 例:当调用Fib(4)时,由下图所示的递归树可以看出,递归调用期间发生了很多次重复计算,因而费时。 Fib(4) Fib(2) Fib(3) Fib(0) Fib(1) Fib(1) Fib(2) Fib(0) Fib(1) 三、递归算法可用等效非递归算法实现 因为递归费时费空间,如果可能,一般将递归改为非递归。递归的递和归的过程实际上实现了一个循环结构,因此有些问题直接用循环的非递归函数来解决。 例:输出数组元素的递归和非递归函数 void rsum(int list[],int n) void rsum(int list[],int n) { if (n=0) { { while (n=0) { coutlist[n]“ “; coutlist[n]“ “; rsum(list ,--n);} --n;} } }
您可能关注的文档
- 数值模拟与仿真基础——7 有限元分析的数学基础.ppt
- 数值模拟与仿真基础——9 有限元方程的解法.ppt
- 数值模拟与仿真基础——1 绪论.ppt
- 数值积分与数值微分 高斯型求积公式.ppt
- 数值算法 2拉格朗日插值.ppt
- 数值电磁学期中报告.ppt
- 数值算法 4分段插值.ppt
- 数值算法 5最小二乘法.ppt
- 数值算法 6二分法.ppt
- 数值算法 三角分解、追赶法.ppt
- 2025至2030冷轧硅钢片行业市场深度研究与战略咨询分析报告.docx
- 2025至2030聚乙烯醇纤维(维尼纶纤维)行业市场深度研究与战略咨询分析报告.docx
- 2025至2030辣条行业市场深度分析及供需形势与投资价值报告.docx
- 2025至2030矿用设备行业市场深度调研及发展趋势与发展趋势分析与未来投资战略咨询研究报告.docx
- 2025至2030冷冻鱼和海鲜行业市场深度研究与战略咨询分析报告.docx
- 2025至2030莱特币交易所行业市场深度研究与战略咨询分析报告.docx
- 2025至2030考试系统产业市场深度分析及前景趋势与投资报告.docx
- 2025至2030拉床行业市场深度研究与战略咨询分析报告.docx
- 2025至2030乐器产业园区定位规划及招商策略咨询报告.docx
- 2025至2030军事通信行业市场占有率及投资前景评估规划报告.docx
最近下载
- 中华民族共同体概论课件第八讲共奉中国与中华民族聚力发展.pptx VIP
- 一种碱性磷酸酶标记抗体或抗原的方法.pdf VIP
- 2024-2025部编人教版小学语文1一年级上册(全册)优秀课件.ppt
- 手术室PDCA——提高急诊手术器械物品准备的完善率.pptx VIP
- 宠物行业宠物智能喂食器研发方案.doc VIP
- 老年人徒手肌力评定健康促进课件.pptx VIP
- TPM管理培训课件.pptx VIP
- 中华民族共同体概论大讲堂课件第七讲华夷一体与中华民族空前繁盛(隋唐五代时期).pdf VIP
- 灰库系统钢结构加固施工方案.docx VIP
- 2025至2030中国中医馆行业市场发展分析及前景趋势与投资机会报告.docx
文档评论(0)