《数据结构》第6章-递归.ppt

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

递归过程的实现与堆栈实现递归的系统工作栈由系统管理;也可自己设计基于栈的非递归程序。堆栈常用的操作:1〕CREATS(S):建立一个堆栈S;2〕S?x:元素x进栈;3〕x?S:元素x出栈;4〕StackEmpty(S):假设S为空,返回1.汉诺塔问题k为中间柱,将i柱上的第1至n?1号盘移到j柱上;将i柱的第n号盘移到k柱上;i为中间柱,将j柱上的第1至n?1号盘移到k柱上。HANOI(n,i,j,k): HANOI(n?1,i,k,j)MOVE(i,k).HANOI(n?1,j,i,k)递归算法?迭代算法堆栈保存四元组(n,i,j,k)HR〔n?1,i,k,j〕.MOVE(i,k)HR〔n?1,j,i,k〕?HR(1,i,j,k)S?〔n?1,j,i,k〕S?〔1,i,j,k〕S?〔n?1,i,k,j〕n?1,i,k,j1,i,j,kn?1,j,i,k出栈方向将i柱靠上的1个盘子移动k柱上.进栈方向算法HI(m)/*HI为求解汉诺塔问题的迭代算法;m为原柱上的圆盘个数;S为存放四元组〔?,?,?,?〕的堆栈,?表示待移动的圆盘数,?,?,?三个参数分别代表原柱、中间柱和目标柱之一,且?,?,?三者所代表的柱子互异*/HI1.[创立堆栈]CREATS(S).HI2.[堆栈初始化]S?〔m,1,2,3〕.HI3.[利用栈实现递归]WHILENOT(StackEmpty(S))DO((n,i,j,k〕?S.IFn?1THENMOVE(i,k)//将柱i上的圆盘移到柱k上ELSE(S?(n?1,j,i,k).S?(1,i,j,k).S?(n?1,i,k,j)))▌仍以(3,1,2,3)为例,算法HI的堆栈初始化时,堆栈S为:经过第一次循环后,堆栈S变为:经过第二次循环后,堆栈S变为:经过第三、第四、第五和第六次循环,依次完成如下移动:1→3.1→2.3→2.1→3.此时,堆栈S中仅剩一个元素(3,1,2,3)(2,1,3,2)(1,1,2,3)(2,2,1,3)(1,1,2,3)(1,1,3,2)(1,3,1,2)(1,1,2,3)(2,2,1,3)(2,2,1,3)n?1第2个参数第4个参数第3个参数1第2个参数第3个参数第4个参数n?1第3个参数第2个参数第4个参数(1,2,3,1)(1,2,1,3)(1,1,2,3)经过第七次循环堆栈S由(2,2,1,3)变为:经前七次循环1→3.1→2.3→2.1→3经过第八、第九和第十次循环,依次完成如下移动:2→1.2→3.1→3.n?1第2个参数第4个参数第3个参数1第2个参数第3个参数第4个参数n?1第3个参数第2个参数第4个参数第六章递归6.1递归的定义6.2根本递归过程6.3递归过程实现与堆栈6.4递归法求解问题下一节6.5递归的效率★委员会问题给出非负整数N和K,求从N个人中选出K个组成一个委员会的方式总数,即C(N,K)假设N(N?6)个人为A、B、C、D、E和F,K个人(K?2)组成1个委员会,将委员会的所有可能情况列在成员组的周围,如下页图所示。★ABCDEFCECFCDEFBCBDDEBEBFDFACADABAE

文档评论(0)

181****7662 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档