- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第5章 递归(Recurve) 定义: 若一个对象部分地包含它自己,或用它自己给自己定义,则 称这个对象是递归的;而且一个过程直接地或间接地调用自 己,则称这个过程是递归的过程。 应用: (1)用于某些概念的定义: 阶乘: if ( n0 ) n ! = n ( n-1 ) ! if ( n=0 ) n ! = 1 单链表结点: template class Type class ListNode {private: Type data; ListNodeType * Link; } 二叉树:二叉树是数据元素的有穷集合,它或者为空集(空 二叉树),或者由一个根元素和其下的两棵互不相 交的二叉树(左子树和右子树)构成。 (2)用于编程 long f ( long n ) //求自然数 n 的阶乘 n ! , n=0 { if ( n==0 ) return 1; else return n * f ( n-1 ); } 递归算法的优点:易编程、可读性好、易检验 可用归纳思维方法来理解和检验递归算法,但有一个基本条件 和两个步骤: 基本条件:规格说明必须严格、精确地规定算法的功能、 入 / 出口信息、对外层量或全局量的影响 步骤一:归纳基始——验证算法对于最简单情况(递归出 口)的正确性 步骤二:由归纳假设进行归纳——假设算法中的递归调用 能正确实现规格说明之规定,然后验证整个算法 能否实现规格说明之规定 递归算法举例——迷宫问题递归算法 void RecurveSeek ( int i , j ) //进入时 ( i , j )是一通道块,尚未印足迹,不在当前路径上。本函数 //从 ( i , j ) 起探索并输出以此时当前路径为前缀的所有成功的简单路 //径,退出时状态同进入时状态 { maze[ i ] [ j ] = ‘0’ ; //印足迹,归入当前路径 if ( i == n j == n ) printmaze( ) ; //简单情况 else for ( k = 0 ; k 4 ; k ++ ) //试探东南西北四个方向 if ( maze[ i + di[ k ] ] [ j + dj[ k ] ] == ‘ ‘ ) //若下一块是通道 RecurveSeek( i + di[ k ] , j + dj[ k ] ) ; //则递归调用 maze[ i , j ] = ‘ ‘ ; //回溯,恢复进入时状态 } 假定入口为 ( 0 , 0 ) ,则只需执行下列函数调用即可找到迷宫的 所有简单路径: RecurveSeek( 0 , 0 ) ; 5.3 递归过程与递归工作栈 为了保证递归调用的正确性,需要保存调用点的现场(返回地 址、局部变量、被调用函数的参数等),以便正确地返回,并且按 先进后出的原则来管理这些信息。在高级语言(编译程序)中,是 通过利用“递归工作栈”来实现递归调用的。 f(n) f(n-1) f(n-2) f(1) f(0) 调用时执行入栈操作保存现场,返回时执行出栈操作恢复现场 计算 4 ! 递归过程图示: 下图中 Pi 代表现场信息,栈元素由现场信息和参数构成 f(4)=4*f(3) f(3)=3*f(2) f(2)=2*f(1) f(1)=1*f(0) f(0)=1 Push(e4) Push(e3) Push(e2) Push(e1) f(4)= 4 * f(3) f(3)= 3 *f(2) f(2)= 2 *f(1) f(1)= 1 * f(0) 一般来说,递归方法的执行效率较低,但编程效率较高,因此 常用来构建快速原型。另外递归结构一般可以转化成循环结构(有 时需要栈操作的配合)。试实现上述阶乘计算的转化(要求用栈)。 * * … 调用 返回 调用点 Pn Pn-1 Pn-2 P1 1 P4 4 P3 3 P4 4 P2 2 P3 3 P4 4
您可能关注的文档
最近下载
- GB+39496-2020尾矿库安全规程.docx VIP
- 衡水体英文字母字帖.pdf VIP
- 聚酰亚胺 化学、结构与性能的关系及材料.pdf VIP
- 2025-2026学年小学信息技术(信息科技)五年级上册重大版(2023)教学设计合集.docx
- 迎春杯历年试题全集(上).pdf VIP
- 建筑结构检测鉴定与加固课程-第7章 钢结构加固.ppt VIP
- PW5300_2.0数据手册下载.pdf VIP
- 建筑结构检测鉴定与加固课程-第8章 建筑结构的改造.ppt VIP
- 重大版小学信息技术教案四年级上册教案.doc VIP
- 多因子选股系列研究之十八:成交量激增与骤降时刻的对称性与“一视同仁”因子构建.pdf VIP
文档评论(0)