- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
例6.28 已知一个一维数组A[1..N](N50),又已知一整数M。 如能使数组A中任意几个元素之和等于M,则输出YES,反之则为NO。 【分析】对于一个已确定的数组a[1]至a[n]和一个确定的数m,判断能否使数组a中任意几个元素之和等于m,等价于判断能否从数组a中取任意数使其和为m。 此时若a[n]=m,则可以输出“YES”,否则若n=1,则可以输出“NO”。 否则可以按以下规则进行判断:对于a中任意元素a[n]只有取与不取两种情况: (1)取a[n]: 则此时问题转化为:对于一个已确定的数组a[1]至a[n-1]和一个确定的数m-a[n],判断能否使数组a中任意几个元素之和等于m-a[n]。 (2)不取a[n]: 则此时问题转化为:对于一个已确定的数组a[1]至a[n-1]和一个确定的数m,判断能否使数组a中任意几个元素之和等于m。 若用函数sum(n,m)表示能否从数组a[1]至a[n]中取任意数使其和为m,只要sum(n-1,m-a[n])和sum(n-1,m)当中有一个值为真,则sum(n,m)为真,否则为假。因此,可以用递归来解此题。 递归终止条件为: if a[n]=m then sum:=true else if n=1 then sum:=false; 采用函数编写程序如下: Program ex6_28_1; Const max=50; Var a:array[1..max] of integer; n, m, i:integer ; Function sum(n,m:integer):boolean; Begin if a[n]=m then sum:=true else if n=1 then sum:=false else sum:=sum(n-1,m-a[n]) or sum(n-1,m); End; Begin readln(n); for i:=1 to n do readln(a[i]); readln(m); if sum(n,m) then writeln(YES) else writeln(NO); End. 采用过程编写程序如下: Program ex6_28_2; Const max=50; Var a:array[1..max] of integer; n, m, i:integer ; flag : boolean; Procedure sum(n,m:integer); Begin if a[n]=m then flag:=true ` //利用全局变量flag传递结果 else if n=1 then exit //n=1作为递归边界,不再递归下去 else begin sum(n-1,m-a[n]); sum(n-1,m); end; End; Begin readln(n); for i:=1 to n do readln(a[i]); readln(m); flag := false; sum(n,m); if flag then writeln(YES) else writeln(NO); End. 小结 简单地说,递归算法的本质就是自己调用自己,用调用自己的方法去处理问题,可使解决问题变得简洁明了。 递归程序在执行过程中,一般具有如下模式: ①将调用程序的返回地址、相应的调用前的变量都保存在系统堆栈中; ②执行被调用的过程或函数; ③若满足退出递归的条件,则退出递归,并从栈顶上弹回返回地址、取回保存起来的变量值,继续沿着返回地址,向下执行程序; ④否则继续递归调用,只是递归调用的参数发生变化:增加一个量或减少一个量,重复执行直到递归调用结束。 【上机练习6.4】 1、用递归的方法求1+2+3+……+N的值。 2、用递归函数输出斐波那契数列第n项。0,1,1,2,3,5,8,13…… 3、输入一个非负整数,输出这个数的倒序数。例如输入123,输出321。 4、用递归算法将数组A中的N个数倒序输出。 5、用递归方法求N个数中的最大数及其位置。 6、用递归算法将一个十进制数X转换成
您可能关注的文档
- 《自己的花是让别人看的》说课绪论.ppt
- 超分辨_20160720绪论.docx
- 超分子化学绪论.docx
- 《自己的花是让别人看的》绪论.ppt
- 超级完整大型演出现场扩声系统的调试流程绪论.docx
- 超全版英文故事绪论.docx
- 《自由落体运动》绪论.ppt
- 超声波测距绪论.docx
- 超声波焊接机,超声波塑料焊接机(天津闰丰)操作说明绪论.docx
- 超声波金属焊接绪论.docx
- 【RationalRose2003基础】第10章ANSICPP的Rose双向工程绪论.ppt
- 煤气化技术百问绪论.docx
- 【SIDH】九年级科学上册(浙教版)习题:3.5.2比热容和热量的计算(共11张)绪论.ppt
- 【SPSS19】第3章SPSS描述性统计绪论.ppt
- 【SPSS19】第11章SPSS在时间序列预测中的应用绪论.ppt
- 【SPSS19】第12章SPSS在市场调研中的应用绪论.ppt
- 【SQDH】2015-2016学年(人教版)八年级语文下册:15喂——出来绪论.ppt
- 【SQDH】2015-2016学年(人教版)八年级语文下册:周周清4绪论.ppt
- 郴州市柿竹园选矿厂生产实习绪论.docx
- 美菜全国销售话术绪论.docx
最近下载
- DM.03 ×× U9 ERP项目-实施备忘-年月日.doc VIP
- DM.16.01 ××U9 ERP项目培训计划书.docx VIP
- DM.01 ×× U9 ERP项目-项目章程.pptx VIP
- 理论力学(第9版)(I)习题答案解析.pdf
- 公司片区经理竞聘演讲与公司物业半年工作总结合集.doc VIP
- DM.18 ×× U9 ERP项目-阶段汇报.pptx VIP
- 建筑结构抗震设计05(PPT81页).pptx VIP
- 【完整版】IATF16949-2016内审检查表(按过程方法编制).docx VIP
- 贸易公司的授信管理.pptx VIP
- 中国建筑第八工程局有限公司安全管理制度汇编 .doc VIP
原创力文档


文档评论(0)