递推算法分析_精品文档PPT格式课件下载.ppt
《递推算法分析_精品文档PPT格式课件下载.ppt》由会员分享,可在线阅读,更多相关《递推算法分析_精品文档PPT格式课件下载.ppt(20页珍藏版)》请在冰豆网上搜索。
![递推算法分析_精品文档PPT格式课件下载.ppt](https://file1.bdocx.com/fileroot1/2022-10/14/19723d0d-09ea-4224-a335-2382cc650857/19723d0d-09ea-4224-a335-2382cc6508571.gif)
项。
3.3.递推的实施步骤递推的实施步骤n(11)确定递推变量)确定递推变量递推变量可以是简单变量,也可以是一维或多维数组。
递推变量可以是简单变量,也可以是一维或多维数组。
n(22)建立递推关系)建立递推关系递推关系是递推的依据,是解决递推问题的关键。
递推关系是递推的依据,是解决递推问题的关键。
n(33)确定初始(边界)条件)确定初始(边界)条件根据问题最简单情形的数据确定递推变量的初始(边界)根据问题最简单情形的数据确定递推变量的初始(边界)值,这是递推的基础。
值,这是递推的基础。
n(44)对递推过程进行控制)对递推过程进行控制递推过程控制:
递推在什么时候结束,满足什么条件结束。
递推过程控制:
44.递推算法框架描述递推算法框架描述递推算法框架描述递推算法框架描述n(11)简单顺推算法简单顺推算法顺推即从前往后推,从已求得的规模为顺推即从前往后推,从已求得的规模为1,2,1,2,i-1,i-1的一系列解,推出问题规模为的一系列解,推出问题规模为ii的解,的解,直至得到规模为直至得到规模为nn的解:
的解:
nf(1f(1i-1)=i-1)=;
/确定初始值确定初始值nfor(k=i;
k=n;
k+)for(k=i;
k+)nf(k)=f(k)=;
/根据递推关系实施顺推根据递推关系实施顺推nprint(f(n)print(f(n);
/输出输出nn规模的解规模的解f(n)f(n)n(22)简单逆推算法简单逆推算法逆推即从后往前推,从已求得的规模为逆推即从后往前推,从已求得的规模为n,nn,n1,1,i+1,i+1的的一系列解,推出问题规模为一系列解,推出问题规模为ii的解,直至得到规模为的解,直至得到规模为11的解:
nf(nf(ni+1)=i+1)=;
k=1;
k-)for(k=i;
k-)nf(k)=f(k)=;
/实施逆推实施逆推nprint(f
(1)print(f
(1);
n(33)较复杂的递推问题需设置多重循环递推。
)较复杂的递推问题需设置多重循环递推。
例1:
1、1、2、3、5、8、的第n项。
问题分析:
斐波那契数列具有下列递推关系an=an-2+an-1,a1=1,a2=1,q且其中n=3算法描述:
intfib(intn)inti,f1=1,f2=1,f;
for(i=3;
i=n;
i+)f=f1+f2;
f1=f2;
f2=f;
if(n=1|n=2)return1;
elsereturnf;
二、递推算法实例1、输出斐波那契数列:
1、1、2、3、5、8、的前n项。
(每行输出10个数)2、求斐波那契数列:
1、1、2、3、5、8、的前n项的和。
思考:
二、递推算法实现实例例2:
求n!
。
算法描述:
intfact(intn)inti,s=1;
for(i=1;
i+)s=s*i;
returns;
二、递推算法实现例3:
i3k3)n(22)确定确定初始条件初始条件nf
(1)=1f
(1)=1;
即;
即1=1;
f
(2)=11=1;
f
(2)=1;
即2=1+1;
f(3)=22=1+1;
f(3)=2;
即3=1+1+13=1+1+1;
3=33=31.1.算法分析算法分析算法分析算法分析2.2.算法描述算法描述算法描述算法描述nprintf(printf(请输入台阶总数请输入台阶总数n:
);
n:
nscanf(%d,&
n);
scanf(%d,&
nf1=1;
f2=1;
f3=2;
/f1=1;
/赋初值赋初值nfor(k=4;
k+)for(k=4;
k+)nfk=fk-1+fk-3;
/fk=fk-1+fk-3;
/实施递推实施递推nprintf(%d,fn);
printf(%d,fn);
3.23.2水手分椰子水手分椰子n案例提出案例提出n五个水手来到一个岛上,采了一堆椰子。
一段时间后,五个水手来到一个岛上,采了一堆椰子。
一段时间后,第一个水手醒来,悄悄地将椰子等分成五份,多出一个椰第一个水手醒来,悄悄地将椰子等分成五份,多出一个椰子,便给了旁边的猴子,然后自己藏起一份,再将剩下的子,便给了旁边的猴子,然后自己藏起一份,再将剩下的椰子重新合在一起。
不久,第二名水手醒来,同样将椰子椰子重新合在一起。
不久,第二名水手醒来,同样将椰子等分成五份,恰好也多出一个,也给了猴子。
然后自己也等分成五份,恰好也多出一个,也给了猴子。
然后自己也藏起一份,再将剩下的椰子重新合在一起。
以后每个水手藏起一份,再将剩下的椰子重新合在一起。
以后每个水手都如此分了一次并都藏起一份,也恰好都把多出的一个给都如此分了一次并都藏起一份,也恰好都把多出的一个给了猴子。
第二天,五个水手醒来,把剩下的椰子分成五份,了猴子。
第二天,五个水手醒来,把剩下的椰子分成五份,恰好又多出一个,给了猴子。
恰好又多出一个,给了猴子。
n问原来这堆椰子至少有多少个问原来这堆椰子至少有多少个?
n设置设置yy数组,第数组,第ii个水手藏椰子数为个水手藏椰子数为y(i)(i=1,2,y(i)(i=1,2,5),5)个,第二天个,第二天55个水手醒来后各分个水手醒来后各分得椰子为得椰子为y(6)y(6)个,依题意原来这堆椰子数为个,依题意原来这堆椰子数为x=5*y
(1)+1x=5*y
(1)+1n为了求取为了求取y
(1)y
(1),实施递推。
相邻两人所藏椰子,实施递推。
相邻两人所藏椰子数数y(i)y(i)与与y(i+1)y(i+1)之间的关系为之间的关系为4*y(i)=5*y(i+1)+1(i=1,2,4*y(i)=5*y(i+1)+1(i=1,2,5),5)(33)n习惯按时间顺序递推,从习惯按时间顺序递推,从y(i)y(i)推出推出y(i+1)y(i+1),即,即y(i+1)=(4*y(i)-1)/5(i=1,2,y(i+1)=(4*y(i)-1)/5(i=1,2,5),5)(44)1.1.算法分析算法分析算法分析算法分析n第二个问题,递推何时结束?
第二个问题,递推何时结束?
n问题本身没有边界条件限制,只要求上面问题本身没有边界条件限制,只要求上面55个递个递推方程所涉及的推方程所涉及的66个量个量y(i)y(i)都是正整数。
也就是说,都是正整数。
也就是说,若有若有66个整数个整数y(i)y(i)满足满足55个方程个方程4*y(i)=5*y(i+1)+14*y(i)=5*y(i+1)+1,(i=1,2,(i=1,2,5),5)即为一个解。
即为一个解。
n首先首先y
(1)y
(1)赋初值赋初值k(k(取值从取值从11开始递增开始递增)后推出后推出y
(2)y
(2),由,由y
(2)y
(2)推出推出y(3)y(3),依此经,依此经55次递推得次递推得y(6)y(6)。
如果某一次推出的不是整数,则中止继续往。
如果某一次推出的不是整数,则中止继续往后推,返回后推,返回kk增增11后赋值给后赋值给y
(1)y
(1),从头开始。
如果,从头开始。
如果55次递推都是整数,则输出原有椰子数次递推都是整数,则输出原有椰子数5*y
(1)+15*y
(1)+1后结后结束。
束。
2.2.算法描述算法描述算法描述算法描述ninti;
doublek,x,y7;
inti;
ni=1;
k=1.0;
y1=k;
i=1;
nwhile(i=5)while(i=5)ni+;
yi=(4*yi-1-1)/5;
i+;
nif(yi!
=if(yi!
=(intint)yi)yi)nk=k+1.0;
k=k+1.0;
nnx=5*y1+1;
x=5*y1+1;
nprintf(printf(原有椰子至少有:
原有椰子至少有:
%6.0f%6.0f个个.n,x);
.n,x);
习题习题3:
1,2,3,5,6,73:
1,2,3,5,6,7第第33章作业章作业第第33章上机章上机(1111)上机通过本章递推序列、幂序列、水手上机通过本章递推序列、幂序列、水手上机通过本章递推序列、幂序列、水手上机通过本章递推序列、幂序列、水手分椰子与猴子爬山等案例;
分椰子与猴子爬山等案例;
(2222)上机通过习题上机通过习题上机通过习题上机通过习题3-5,3-6,3-7;
3-5,3-6,3-7;
(3333)上机通过习题上机通过习题上机通过习题上机通过习题3-9,3-9,3-9,3-9,比较递推与迭代所比较递推与迭代所比较递推与迭代所比较递推与迭代所得结果。
得结果。