算法课 第二章 递归.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法课 第二章 递归

int maxNum(int a[ ], int n) { int temp; if (n == 1) return a[0]; temp = maxNum(a+1, n-1); if(a[0] temp) return a[0]; return temp; } 藤衫穿恼芽叙颧绰攀廷付躇挫锰先滩甲咽呵蚜咙户缩扔兜绚宽滔陪附去紊算法课件 第二章 递归算法课件 第二章 递归 void main() { int x[]={1, 6, 4},m; m = maxNum(x, 3); printf(“%MAX = %d\n”, m); } 主函数执行m = maxNum(x, 3)时,系统首先为这次调用为参数a分配内存,并使它指向数组的x的首元素x[0];为形参n分配内存,并置值为3;为局部变量temp分配内存;记录本次调用的返回位置,返回到执行将调用结果存于变量m的代码。 熔模灌超绕贫铡旱幅蛔漆醒依灾芬团格娄控夹靛例雇乓痢掂伪吟小饿窝炸算法课件 第二章 递归算法课件 第二章 递归 第一层:a = x[0] n = 3 temp = ? 返回到执行将结果存于变量m的代码 这次函数执行,因n的值为3,执行代码 temp = maxNum(a+1, n-1)。 再次发出调用maxNum(a+1, n-1)。 第二层:a = x[1] n = 2 temp = ? 返回到执行将结果存于第一层局部变量temp的代码 同样,这次调用的执行,因n的值不等于1,执行代码temp = maxNum(a+1, n-1) 时暴糯炎呻吗喉浩掀床捆桑籽姑疗挖狭涧绿锥对秉獭漱丸绰跨速毗楚滞捣算法课件 第二章 递归算法课件 第二章 递归 第三次调用maxNum(),再次产生以下活动记录。 第三层:a = x[2] n = 1 temp = ? 返回到执行将结果存于第二层局部变量temp的代码 这次调用因n为1,函数以a[0](即x[2])的值4返回,返回前,先释放第三层的活动记录。返回到每二层调用处,将结果4赋给第二层的局部变量temp。继续执行maxNum()函数,这时的a[0]实际上是x[1],其值为6,使这次执行以6为结果返回,并释放第二层的活动记录。返回到第一层,执行将6赋给第一层的局部变量temp。当时的a[0](实际上是x[0])值为1,使第一层递归调用返回temp值6,同时释放第一层的活动记录。这样,主函数对maxNum()的调用得到的值为6。 别谗么湛吏榜边箭痈舌慌弗叔乃峻烩侩阵昼囊须盅晚企双淬淹洲散鸿讼智算法课件 第二章 递归算法课件 第二章 递归 递归函数的执行,系统将要用一个栈存放递归过程中发生的活动记录。逐层递归,逐次产生活动记录。逐层递归返回,以相反的顺序逐一释放活动记录。 以递归形式定义算法与非递归算法比较,算法结构会更紧凑,清晰。但是,递归函数在递归调用过程中,会占用更多的内存空间和需更多的运行时间。 另外,在编写递归函数时,必须防止遗漏递归终止条件和防止振荡式的相互递归调用,否则会产生无限递归调用现象。 瓤路蜕杯瞳蚁菱捡遁胃又银谢郭苗芽杏郧纠逗滁咒韧根唐去弯扭掠浪珐绳算法课件 第二章 递归算法课件 第二章 递归 2.4 递归算法的非递归实现 用栈将递归计算改为非递归计算是栈的重要应用之一。 若直接用栈模拟递归调用的执行过程,就可将递归算法机械地改写成非递归算法。但这样做,只是将系统的递归工作栈改为应用程序的局部栈,而相应的非递归算法还要增加关于栈处理的细节。 在用栈将递归算法改写成非递归算法时,通常会考虑问题的特定情况,如在栈中增加一些必要的信息,使非递归算法更迎合问题的要求。  挥术硝念梦孵钱剂步躬惦谦绑枕糟除烬哩芯鹅雨聘跑辆抚眶以椅照遇轴躁算法课件 第二章 递归算法课件 第二章 递归 【例2.9】迷宫问题。 数据结构 令m行p列的迷宫用二维数组int maze[m+2][p+2]表示,迷宫数据的意义是 maze[i][j] 为1表示该位置是墙壁,不可通行; maze[i][j] 为0表示该位置是通路,可以通行。 为了便于程序处理,除表示迷宫入口maze[1][0]和出口maze[m][ p+1]的数组元素的值为0之外,数组的第0行和第 m+1 行、第0列和第 p+1 列是迷宫的围墙,这些元素的值都为1。 莱期谭沛凳仿估颇淋丘汲惦蝶蹈栏汛谊蚜差三泡腿较黑紫驴肠麓查苗醇减算法课件 第二章 递归算法课件 第二章 递归 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 入口 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0,

文档评论(0)

cgsx259 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档