信息学竞赛辅导4-递推递归.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文档。上传文档
查看更多
信息学竞赛辅导4-递推递归

Var tt, x, n: integer; Procedure f(n: integer); {过程f(n)求xn } begin if n=0 then tt:=1 else begin ( ) {递归调用过程f求x n-1} ( ) end; end; begin write(’input x, n:’); readln(x,n); {输入x, n} f(n); {主程序调用过程xn(n)求x n} writeln(x, ’^’, n, ’=‘, tt); readln end. f(n-1); tt:=tt*x 递归算法,常常是把解决原问题按顺序逐次调用同一“子程序”(过程)去处理,最后一次调用得到已知数据,执行完该次调用过程的处理,将结果带回,按“先进后出”原则,依次计算返回。 如果处理问题的结果只需返回一个确定的计算值,可定义成递归函数。 [例3]用递归算求自然数A,B的最大公约数。 [分析]: 求最大公约数的方法有许多种,若用欧几里德发明的辗转相除方法如下: ①求x除以y的余数; ②如果余数不为0,则让x=y,y=余数,重复步骤①,即调用子程序; ③如果余数为0,则终止调用过程; ④输出此时的y值。 采用函数 Var m,n,g: integer; function gcd(m, n: integer):integer;{函数} var r:integer; begin r:=m mod n; if r =0 then ( ) else gcd:=( ) {递归调用过程} end; begin write(’input m, n=’); readln(m, n); ( ) writeln(’(’, m, ’,’, n, ’)=’, ( ) ); end. gcd:=n gcd(n,r) g:=gcd(m,n) g 采用过程 Var a,b,tt: integer; Procedure gcd(x, y: nteger);{过程} begin if x mod y =0 then ( ) else gcd( ) {递归调用过程} end; begin write(’input m , n=’); readln(m, n); gcd(m, n); writeln(’(’, m, ’,’, n, ’)=’, tt ); end. tt :=y y, x mod y [例4]楼梯共有N阶台阶,上楼可以以一步上一个台阶,也可以一步上二个台阶。编一个程序,计算上N阶台阶,共有多少种走法? [算法分析] 1)我们知道递归程序执行包含递归和递推二个过程,而这二个过程又都是根据一个递推公式进行的,所以我们应先试着找出一个能体现不同规模问题之间关系的递推公式。 2)寻找递推公式:采用逆向思维,即从最终目标考虑。最终目标是指到达第N阶台阶,然后再逆向分析,到达N阶台阶的前一步在哪里? 在N-1或N-2阶上 3)建立递推公式:设上N-1阶台阶共有F(N-1)种走法,上N-2阶台阶共有F(N-2)种走法,则上N阶台阶的走法为: F(N)=F(N-1)+F(N-2) 程序: Var s,n:integer; function f(n:integer):integer; begin if n3 then ( ) else ( ); end; Begin readln(n); ( ) writeln(‘s=’,s); End. f:=n f:=f(n-1)+f(n-2) s:=f(n); 例5、已知一个一维数组a[1..n](n50)和一整数m,如能使数组a中任意几个 元

文档评论(0)

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

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

1亿VIP精品文档

相关文档