子程序的递归与嵌套.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
子程序的递归与嵌套

子程序的嵌套与递归;1、复习函数与过程——子程序;【例1】:输入一个正整数,如果是回文素数则输出“Yes”,否则输出“No”;注意: 1)内、外层子程序不得相互交叉,内层必须完全嵌套在外层之中; 2)一般情况下,在子程序内部需要使用的变量应在子程序的内部进行定义。外层子程序不能访问内层子程序所定义的变量。;function fac(k:integer):longint; var i:integer; t:real; begin t:=1; for i:=2 to k do t:=t*i; fac:=t; end; function cnm(n,m:integer):real; begin cnm:=fac(n)/(fac(m)*fac(n-m)); end;;【例3】:求组合数( )/7! 的和。;3.递归调用: ①递归的定义: Pascal语言中,如果在一个函数、过程等的定义或说明内部又直接或间接地出现有对自身的引用,则称它们是递归的或者是递归定义的。 例如:在数学上,所有偶数的集合可递归地定义为: 0是一个偶数; 一个偶数和2的和是一个偶数。 可见,仅需两句话就能定义一个由无穷多个元素组成的集合。 ②递归的实现: 通过函数或过程的调用来实现。 函数或过程直接调用其自身,称为直接递归;函数或过程间接调用其自身,称为间接递归。;递归应用 ;程序如下: Program ex5; Function num(x:integer):integer; //采用函数编写 begin if x=5 then num:=10 //递归边界 else num:=num(x+1) +2; //递归式 end; BEGIN writeln(The Num is ,num(1)); END.;课堂练习1、program lx1(input,output); var s,n:integer; function f(n:integer):integer; ?begin ? if n=1 then f:=1 else f:=n*n+f(n-1) ?end; begin ?write(‘input n:’);readln(n);s:=f(n);writeln(‘f(’,n,‘)=’,s) end. 该程序的功能是:       。当n的值为6时,程序的运行结果是:        ;②在处理子问题时,如果又调用原问题的处理子程序,但形参值应是不断改变的量(表达式);;如何设计递归算法?; n!;栈;递归过程;分析;分析;参考程序:;执行过程分析;递归结构的优点:结构清晰、容易阅读和理解。 递归结构的缺点:需要保留每次递归调用时的参数和局部变 量,占用内存大,耗费机时多,程序运行 的效率较低 。 递归算法的实用情况: 1.符合递归的描述:需要解决的问题可以化为子问题求解, 而子问题求解的方法与原问题相同,只 是数量增大或减少。 2.递归调用的次数是有限的。 3.必须有递归结束的条件。;例9、汉诺塔问题 ;var a,b,c,number:integer; procedure move(n: integer;a,b,c:char); begin ???? if n=1 then writeln(a,-,c) ???? else ???????? begin ????????????? move(n-1,a,c,b); ????????????? writeln(a,-,c); ????????????? move(n-1,b,a,c) ???????? end; end; begin ???? write(the number of dish:); ???? readln(number); ???? move(number,’A’,’B’,’C’); end.;【例10】求找出具有下列性质的数的个数(包含输入的自然数n): 先输入一个自然数n(n=500),然后对此自然数按照如下方法进行处理: ①. 不作任何处理; ②. 在它的左边加上一个自然数,但该自然数不能超过原数的一半; ③. 加上数后,继续按此规则进行处理,直到不能再加自然数为止. 样例:? 输入:? 6 满足条件的数为? ?6

文档评论(0)

shaoye348 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档