- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第八章 递 归 8.1 递归的概念 8.2 基本递归过程 8.3 递归过程的实现 定义:如果一个对象部分地包含它自己,或者利用自己定义自己的方式来定义或描述,则称这个对象是递归的(递归定义);如果一个过程直接或间接地调用自己,则称这个过程是一个递归过程。(递归算法) 组成:递归调用部分、递归终止条件 递归的简单例子 xn=x*x*…*x*x (n个x连乘) xn+1=xn * x S(n)=1+2+3+…+(n-1)+n S(n+1)=S(n)+(n+1) 以下三种情况适于用递归求解问题: 问题的定义是递归的; 问题所涉及的数据结构是递归的; 问题的解法满足递归的性质。 1、问题的定义是递归的 阶乘函数、幂函数和斐波那契数列。 [例1] 阶乘函数的定义 求解阶乘函数的递归过程 long Factorial(long n) { if (n==0) return 1; //递归终止条件 else return n * Factorial(n-1); } //递归调用过程 2、问题所涉及的数据结构是递归的 [例1] 单链表节点类的递归定义 [例2] 单链表的递归定义 head=NULL 头指针为head的单链表的递归定义: (1)head指向一个空结点的数据结构是一个单链表; (2)head指向一个非空结点,该结点的指针域指向一个单链表,这样的数据结构是一个单链表。 在头指针为p的单链表中有哪些信誉好的足球投注网站data值为item的结点 template class T void Search(Node T *p,T item) { if(p = = NULL) {cerr “Can not find the item .” ;return ;} if (p-data = = item) Dealwith(p); // 通过Dealwith函数对 //该节点进行一定的处理 else Search(p-next,item); } 3、问题的解法满足递归的性质 递归求解的基本思想(分治策略): 对于一个比较复杂的问题,如果能够把它分解为若干个相对简单的、而且解法相同或类似的子问题,那么当这些子问题获得解决时,原问题就获得解决--分治策略。 子问题无需分解就可以直接解决时,停止分解,直接求解该子问题--递归结束条件。 [例1] 二叉树的遍历: 归纳基础 ? 递归出口 归纳步骤 ? 递归调用 [例3] 求文件中的最大元-最小元问题 [例4] 汉诺塔(Tower of Hanoi)问题 … … 8.2 基本递归过程 递归过程在实现时,发生递归调用:分为外部调用和内部调用。 调用方式不同,返回的方式也不相同。 递归过程与实现的基本思想 高级语言的编译程序中,函数调用是通过堆栈实现的; 递归函数调用是一种特殊的函数调用形式,因此也可以通过堆栈实现。 函数调用方式: 递归函数调用方式: 函数调用时执行入栈操作保存本次递归调用对应的信息 函数返回时执行出栈操作恢复上次递归调用对应的信息 一次递归调用所需要的信息表示为一个工作记录: 返回地址 参 数 (函数名、引用参数与实参等) 局部变量 递归工作栈 long Factorial ( long n ) { if ( n == 0 ) return 1; else return n * Factorial (n-1); RetLoc2 } void main ( ) { int Result; Result = Factorial (4); RetLoc1 } 递归算法的优点: 递归过程结构清晰 递归程序易写、易读 正确性证明相对容易 递归算法的不足: 运行效率低,原因: 函数调用开销(时间、空间)大 会出现重复计算 计算斐波那契数列的非递归函数 long CalFib(long n) { if(n = 1) return n; else { long f0 = 0,f1 = 1,f = 0; for( int i = 2;i = n;i++) {
您可能关注的文档
最近下载
- 巨人 通力电梯NOVA GKE调试说明书故障代码GPN15 GVN15_GKE - 51668093D01-2022.pdf VIP
- 吕梁学院《高等数学下》2025 - 2026学年第一学期期末试卷(A卷).docx VIP
- 抖音超火看表情符号猜成语PPT.pptx VIP
- 德龙ICK6000冰淇淋机说明书.pdf
- 昂科威S用户手册.doc VIP
- DB45T12302015红树林湿地生态系统固碳能力评估技术规程.pdf VIP
- 难点详解人教版8年级数学上册《全等三角形》专项训练试题(解析卷).docx VIP
- 难点详解人教版8年级数学上册《全等三角形》专项训练练习题.docx VIP
- 铁路连续梁桥线形监控量测系统使用培训.pdf
- 麻醉危机管理情境模拟教学 .pdf VIP
文档评论(0)