Pascal语言(过程与函数3——递归).ppt

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

* * 六、程序的嵌套和递归调用 1.子程序的嵌套: 注意: 1)内、外层子程序不得相互交叉,内层必须完全嵌套在外层之中; 2)一般情况下,在子程序内部需要使用的变量应在子程序的内部进行定义。外层子程序不能访问内层子程序所定义的变量。 『例题13』:求组合数 的和。 var s:real; function cnm(n,m:integer):real; function fac(k:integer):real; var i:integer; t:real; begin t:=1; for i:=2 to k do t:=t*i; fac:=t; end; begin cnm:=fac(n)/(fac(m)*fac(n-m)); end; begin s:=cnm(6,3)+cnm(9,5); writeln(‘s=’,s:8:2); end. 『例题13』:求组合数( )/7! 的和。 var s:real; function fac(k:integer):real; 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; begin s:=cnm(6,3)+cnm(9,5); writeln(‘s=’,(s/fac(7)):8:2); end. 3.递归调用: ①递归的定义: Pascal语言中,如果在一个函数、过程等的定义或说明内部又直接或间接地出现有对自身的引用,则称它们是递归的或者是递归定义的。 例如:在数学上,所有偶数的集合可递归地定义为: 0是一个偶数; 一个偶数和2的和是一个偶数。 可见,仅需两句话就能定义一个由无穷多个元素组成的集合。 ②递归的实现: 通过函数或过程的调用来实现。 函数或过程直接调用其自身,称为直接递归;函数或过程间接调用其自身,称为间接递归。 直接递归 间接递归 n! 1 n=0 n(n-1)! n0 ③几个例题: 【例14】:用递归计算n! n!可以由下面公式表示: var n,s:integer; function fac(a:integer):integer; begin if a=0 then fac:=1 else fac:=a*fac(a-1); end; begin readln(n); s:=fac(n); writeln(n,‘!=’,s) end. 使用递归求解问题,通常可以将一个比较大的问题层层转化为一个与原问题相类似的、规模较小的问题进行求解,最终达到对原问题的求解。 栈 …… fac(5)=5* …… fac(5)=5* fac(4)=4* fac(3)=3* …… fac(5)=5* fac(4)=4* …… fac(5)=5* fac(4)=4* fac(3)=3* fac(2)=2* fac(5)=5* fac(4)=4* fac(3)=3* fac(2)=2* fac(1)=1* fac(5)=5* fac(4)=4* fac(3)=3* fac(2)=2* fac(0)=1 fac(1)=1* 【例15】:用递归方法求两个数m和n的最大公约数(m0,n0)。 找出递归公式: var m,n,g:integer; function gcd(m,n:integer):integer; var r:integer; begin r:=m mod n; if r=0 then gcd:=n else gcd:=gcd(n,r); end; begin read(m,n); g:=gcd(m,n); writeln(‘m=’,m,‘n=’,n,‘gcd=’,g) end. 递归结构的优点:结构清晰、容易阅读和理解。 递归结构的缺点:需要保留每次递归调用时的参数和局部变 量,占用内存大,耗费机时多,程序运行 的效率较低 。 递归算法的实用情况: 1.符合递归的描述:需要

文档评论(0)

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

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

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档