递推与递归的关系【信息技术】.docVIP

  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、适用题型: 有一类试题,每相邻两项数之间的变化有一定的规律性,我们可将这种规律归纳成如下简捷的递推关系式: Fn g (Fn-1 ) 或者Fn-1 =g’(Fn ) 这就在数的序列中,建立起后项和前项之间的关系。然后从初始条件(或最终结果)入手,一步步地按递推关系式递推,直至求出最终结果(或初始值)。很多程序就是按这样的方法逐步求解的。如果对一个试题,我们要是能找到后一项数与前一项数的关系并清楚其起始条件(或最终结果),问题就好解决,让计算机一步步算就是了。递推分倒推法和顺推法两种形式。一般分析思路: if 求解初始条件F1 then begin {倒推} 由题意(或递推关系)确定最终结果Fn ; Fi-1 =g’(Fi ); i←n;{从最终结果Fn 出发进行倒推} while Fi≠F1 do begin 由Fi-1=g(Fi )倒推Fi-1;ii-1;end;{while} 输出倒推结果F1 和倒推过程; end{then} else begin {顺推} 由题意(或递推关系)确定初始值F1(边界条件); Fi =g (Fi-1 ); i1; {F1出发进行顺推} while Fi≠Fn do begin由Fi=g(Fi-1 )顺推Fi+1;ii+1;end;{while} 输出顺推结果Fn和顺推过程; end;{else} 对于递归和递推的效率问题,一般认为递推比递归优,举一个简单的例子: 最简单的斐波那契数列(Fibonacci),对于f(30),如果使用递归则需要运行1664079次,而递推只需30次就可以了,速度悬殊。 6、例题:P29,例2-9 ;P32,例2-11 7、习题: 递归转非递归 (如下图) Program Qn(Input,Output);{递归算法} const n=8; var  cont,i:integer;  a:array[1..n] of byte;{存放正确的一组解}  c:array[1..n] of boolean;{存放某一列放皇后的情况,用于判断是否有同列的情况}  l:array[1-n..n-1] of boolean;{存放某一斜线上放皇后的情况,用于判断是否有同斜线的情况;斜线的方向为\}  r:array[2..2*n] of boolean;{存放某一斜线上放皇后的情况,用于判断是否有同斜线的情况;斜线的方向为/}  procedure pr;  var   i:integer;  begin   for i:=1 to n do write(a[i]:4);   inc(cont);   writeln( cont=,cont);  end;  procedure try(i:integer);  var  j:integer;   procedure erase(i:integer);   begin    c[j]:=true;    l[i-j]:=true;    r[i+j]:=true;   end;  begin   for j:=1 to n do   begin    if c[j] and l[i-j] and r[i+j] then    begin     a[i]:=j;     c[j]:=false;     l[i-j]:=false;     r[i+j]:=false;     if in then try(i+1) else pr;     erase(i);    end;   end;  end; begin  for i:=1 to n do c[i]:=true;  for i:=1-n to n-1 do l[i]:=true;  for i:=2 to 2*n do r[i]:=true;  cont:=0;  i:=1;  try(i);  writeln;  writeln(program end.);  readln; end. Program Huanghou(Input,

文档评论(0)

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

1亿VIP精品文档

相关文档