- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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,
您可能关注的文档
最近下载
- 人教版历史九年级上册全套教学课件.pptx
- DL_T 1074-2019 电力用直流和交流一体化不间断电源(代替DL_T 1074-2007).docx VIP
- 2025秋统编版(2024)道德与法治一年级上册教学设计(全册) .pdf
- 白癜风中西医防治(王砚宁)_部分1.pdf VIP
- 第二单元生物制品生产等基本技术61课件.pptx VIP
- 最全监理大纲(共486页).docx
- DLT_5293-2013 电气装置安装工程 电气设备交接试验报告统一格式.docx VIP
- MZT213-2024学术类社会团体自身建设指南.pdf VIP
- 职业素养与职业礼仪.docx VIP
- 政务视联网系统解决方案.pptx VIP
文档评论(0)