第3章 节 栈和队列 数据结构课件.ppt

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

国际教育学院 分治法:对于一个较为复杂的问题,能够分解成几个相对简单的且解法相同或类似的子问题来求解 1、能将一个问题转变成一个新问题,而新问题与原问题的解法相同或类同,不同的仅是处理的对象,且这些处理对象是变化有规律的 2、可以通过上述转化而使问题简化 3、必须有一个明确的递归出口,或称递归的边界 用分治法求解递归问题 必备的三个条件 国际教育学院 分治法求解递归问题算法的一般形式: void p (参数表) { if (递归结束条件)可直接求解步骤;-----基本项 else p(较小的参数);------归纳项 } long Factorial ( long n ) { if ( n == 0 ) return 1;//基本项 else return n * Factorial (n-1); //归纳项} 国际教育学院 返回 2 参数 2 计算 2*fact(1) 返回 1 参数 1 计算 1*fact(0) 返回 1 参数 0 直接定值 = 1 参数传递 递归调用 结果返回 回归求值 if ( n == 0 ) return 1; else return n * Factorial (n-1); 求解阶乘 n! 的过程 主程序 main : fact(4) 返回 24 参数 4 计算 4*fact(3) 返回 6 参数 3 计算 3*fact(2) 国际教育学院 设有一个递归算法如下: int X(int n) { if(n=3) return 1; else return X(n-2)+X(n-4)+1 } 则计算X(X(8))时需要计算X函数 次. D 练习 A. 8 B.9 C.16 D.18 国际教育学院 规则: (1) 每次只能移动一个圆盘 (2) 圆盘可以插在A,B和C中的任一塔座上 (3) 任何时刻不可将较大圆盘压在较小圆盘之上 Hanoi塔问题 A B C 国际教育学院 Hanoi塔问题 n = 1,则直接从 A 移到 C。否则 (1)用 C 柱做过渡,将 A 的(n-1)个移到 B (2)将 A 最后一个直接移到 C (3)用 A 做过渡,将 B 的 (n-1) 个移到 C 国际教育学院 #includeiostream.h int c=0; void move(char x,int n,char z) {cout++c,n,x,zendl;} void Hanoi(int n,char x,char y,char z) { if(n==1) move(x,1,z); else {Hanoi(n-1,x,z,y); move(x,n,z); Hanoi(n-1,y,x,z); }} void main(){Hanoi(3,a,b,c);} 跟踪程序,给出下列程序的运行结果,以深刻地理解递归的调用和返回过程 国际教育学院 调用前, 系统完成: (1)将实参,返回地址等传递给被调用函数 (2)为被调用函数的局部变量分配存储区 (3)将控制转移到被调用函数的入口 调用后, 系统完成: (1)保存被调用函数的计算结果 (2)释放被调用函数的数据区 (3)依照被调用函数保存的返回地址将控制转移到调用函数 函数调用过程 国际教育学院 “层次” 主函数 第1次调用 第 i 次调用 0层 1层 i 层 “递归工作栈” “工作记录” 实在参数,局部变量,返回地址 递归函数调用的实现 国际教育学院 程序的具体执行过程参见: “Hanoi塔执行过程.ppt” 国际教育学院 优点:结构清晰,程序易读 缺点:每次调用要生成工作记录,保存状态信息,入栈;返回时要出栈,恢复状态信息。时间开销大。 递归的优缺点 递归?非递归 国际教育学院  队列是一种先进先出(FIFO) 的线性表. 它只允许在表的一端进行插入,而在另一端删除元素 a1 a2 a3 an ... 入队列 队头 队尾 队列 ... 国际教育学院  队列是一种先进先出(FIFO) 的线性表. 它只允许在表的一端进行插入,而在另一端删除元素 a1 a2 a3 an ... 队头 队尾 队列 出队列 ... 国际教育学院  队列是一种先进先出(FIFO) 的线性表. 它只允许在表的一端进行插入,而在另一端删除元素 a1 a2 a3 an ... 队头 队尾 队列 出队列 ... 国际教育学院  队列是一种先进先出(FIFO) 的线性表. 它只允许在表的一端进行插入,而在另一端删除元素 a1 a2 a3 an ... 队头 队尾 队列 出队列

文档评论(0)

yuzongxu123 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档