《数据结构》课件(C语言)第03章.ppt

  1. 1、本文档共134页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
递归运 行的层次 运行语句 行号 塔与圆盘 的状态 0,3,a,b,c 0,3,a,b,c 8,2,b,a,c 2 3 0 2 6,7 1,2,3, 9 8,9 递归工作栈 状 态 0,3,a,b,c 8,2,b,a,c 3 2 1 a b c 说明 a→c 1 0,3,a,b,c 8,2,b,a,c 8,1,a,b,c b→c 2 1 8,9 3 2 1 a b c 同上 同上 同上 栈空 示例 简化的背包问题 设有一个背包可以放入的物品重量为S,现有n件物品,重量分别为w1,w2,…,wn.问能否从这n件物品中选择若干件放入背包,使得放入的重量之和正好为S。如果存在一种符合上述要求的选择,则称此背包问题有解(或称解为“真”),否则此问题无解(或称解为“假”)。 [分析] 用Knap(S,n)表示上述背包问题的解,它是一个布尔函数,其参数应满足S0,n≥1. 当S=0时,背包问题总有解,即Knap(0,n)=true,只要不选择任何物品放入背包即可: 当S0时,背包问题总无解,即Knap(s,n)=false,因为无论怎样选择总不能使重量之和为负值; 当S0但n1时,背包问题也无解,即Knap(S,n)=false,因为不取任何东西就要使重量为正值总是办不到的; 3、栈与递归 当S0且n≥1时,分两种情况: 1) 所选择的一组物品中不包含wn ,这样Knap(s,n)的解就是Knap(s,n-1) 的解; 2) 所选择的一组物品中包含wn ,这时Knap(s,n)的解就是Knap(s-wn,n-1) 的解; 背包问题的递归定义 由上述定义不难编写出背包问题的递归算法。今写成递归函数的形式。 3、栈与递归 Status Knap( int S,int n ) { if( S == 0 ) return true; if((S0) || (S0 n1)) return false; if( Knap( S - W[n],n-1) == true ) { printf(“%d ”,W[n]); return true } return (Knap(S,n-1)); } //Knap 注.算法中假设Wi(i=1,2,···,n)均为正整数,并已经存放在一维 整型数组W之中。 3、栈与递归 递归函数的优点: (1) 结构清晰,易于理解; (2) 正确性容易证明; (3) 易调试,易实现。 递归函数的缺点: (1) 实现效率较低,无论是时间还是空间都较非递归算法为差; (2) 有些计算机高级语言不具有递归的功能,不支持递归。 递归与非递归的取舍:①若问题存在着明显的迭代解法,则宜避免使用递归。 ②倘若问题的本质是递归的,则宁可牺牲一些效率也应该使用递归,以便算法简洁易读。 ③对于不允许递归的语言,或者是特别强调算法的效率时,可以先设计出递归算法,然后再将它转换成非递归算法。由于由系统实现递归时隐含着栈的处理,因此,用非递归算法来描述递归算法时,一般都包含着对栈的显式处理。 3、栈与递归 ? 递归函数转换成非递归函数 递归函数转换成非递归函数的实质是:将原由系统进行管理的递归工作栈改为由程序员负责管理。 转换成非递归的算法的一般结构 //BEGIN 初始化栈;第一次进栈; do while(非递归终止条件){入栈处理} if( top1 ) {出栈处理} while(( top == 1 )(递归终止条件)) 结束处理; //END; 注.第一次进栈 top=1; S[top]=(参数表); 若无初始进栈,则可将1改成0。 ? 递归函数转换成非递归函数 简单算术表达式求值算法——算符优先算法 讨论简单算术表达式的求值问题。 算符优先法:根据算术四则运算的规则亦即运算优先关系的规定,实现对表达式的编译或解释执行。 使用栈实现简单算术表达式的求值运算。 依据算术四则运算的规则,在运算的每一步中。任何两个相继出现的算符θ1和θ2之间的优先关系,可能是 θ1θ2 θ1的优先数低于θ2 θ1=θ2 θ1的优先数等于θ2

文档评论(0)

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

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

1亿VIP精品文档

相关文档