知识点栈与递归.ppt

  1. 1、本文档共31页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
知识点栈与递归.ppt

* * 《 数据结构》 第三章(第二部分) * 3.3 栈与递归的实现 递归的概念 递归函数调用的步骤 (知识点三) * 3.3 栈与递归的实现 3.3.1 递归的概念 栈的一个典型应用是程序设计中的递归过程的设计与实现。 运用栈来保存调用过程的返回地址与参数。 所谓递归过程(函数)就是子程序或函数中直接或间接地调用自己。 一般递归分为直接递归和间接递归这两类,如下面的三个程序段: * 第一:直接递归 Function A1; { …; A1; … } * 第二:间接递归-1 Function A2; { …; B2; … } Function B2; { …; A2; … } * Function A3; { …; B3; … } 第二:间接递归-2 Function B3; { … ; C ; … } Function C; { … ; A3 ; … } *   当在一个函数运行期间调用另一个函数时,在运行该被调用函数之前,需完成三件事: (1)将所有的实在参数、返回地址等信息传递给被调用函数保存; (2)为被调用函数的局部变量分配存储区; (3)将控制转移到被调用函数的入口 3.3.2 递归函数调用的步骤 * 递归特点: (1)程序简单,逻辑次序明晰; (2)自身调用自身; (3)运行时间比其它的要长; (4)阅读较难。 * 汉诺塔问题 问题描述:有A,B,C三个塔座,A上套有n个直径不同的圆盘,按直径从小到大叠放,形如宝塔,编号1,2,3……n。要求将n个圆盘从A移到C,叠放顺序不变,移动过程中遵循下列原则: 每次只能移一个圆盘 圆盘可在三个塔座上任意移动 任何时刻,每个塔座上不能将大盘压到小盘上 * 解决方法: n=1时,直接把圆盘从A移到C。 n1时,先把上面n-1个圆盘从A移到B,然后将n号盘从A移到C,再将n-1个盘从B移到C。即把求解n个圆盘的Hanoi问题转化为求解n-1个圆盘的Hanoi问题,依此类推,直至转化成只有一个圆盘的Hanoi问题。 * 递归工作栈保存内容: 返回地址 n x y z 返回地址用行编号表示 每层递归调用需分配的空间形成递归工作记录,按后进先出的栈组织。递归工作栈保存内容: * void Hanoi(int n,char x,char y,char z) ① { ② if (n==1) ③ move(x,1,z); /* 编号为1的圆盘从x移到z */ ④ else { ⑤ Hanoi(n-l,x,z,y);/* 将x上号1到n-1的盘移到y上,z辅助 */ ⑥ move(x,n,z); /* 将编号为n的圆盘从x移到z上* / ⑦ Hanoi(n-l,y,x,z);/* 将y上号为1至n-l 的盘移到z上,x辅助* / ⑧ } ⑨ } * 阅读递归程序方法 首先根据递归程序的特点来分析阅读递归程序的过程. (1)递归程序特点之一 每个递归程序都是满足某特定条件才被执行; (2)递归程序特点之二 因为递归程序是程序的函数(过程)自身调用自身的过程,所以该递归程序一定有一个逃出递归程序的出口,即满足某条件,则逃出递归程序;否则,该程序则会陷入无限循环. * 地址栈内容包括两部分内容: (1)保存递归函数返回地址; (2)保存当前递归运行的参数; * 3 2 1 x y z 初始状态,假设n=3,递归程序运行当前的参数分别为:a,b,c * 以hannoi递归为例 #include stdio.h int main() { …; hannoi(3,a,b,c); ?0: Printf(“%d\n”,a); …; } void Hanoi(n, x, y, z) ①{ ②if (n==1) ③ move(x,1,z); ④ else { ⑤ Hanoi(n-l,x,z,y) ?1: ⑥ move(x,n,z); ⑦ Hanoi(n-l,y,x,z) ⑧ }

文档评论(0)

170****0532 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8015033021000003

1亿VIP精品文档

相关文档