第3章 递推算法(c++版)

第3章 递推算法(c++版)

ID:36112833

大小:404.50 KB

页数:38页

时间:2019-05-06

第3章  递推算法(c++版)_第1页
第3章  递推算法(c++版)_第2页
第3章  递推算法(c++版)_第3页
第3章  递推算法(c++版)_第4页
第3章  递推算法(c++版)_第5页
第3章  递推算法(c++版)_第6页
第3章  递推算法(c++版)_第7页
第3章  递推算法(c++版)_第8页
第3章  递推算法(c++版)_第9页
第3章  递推算法(c++版)_第10页
资源描述:

《第3章 递推算法(c++版)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第三章递推算法递推法是一种重要的数学方法,在数学的各个领域中都有广泛的运用,也是计算机用于数值计算的一个重要算法。这种算法特点是:一个问题的求解需一系列的计算,在已知条件和所求问题之间总存在着某种相互联系的关系,在计算时,如果可以找到前后过程之间的数量关系(即递推式),那么,从问题出发逐步推到已知条件,此种方法叫逆推。无论顺推还是逆推,其关键是要找到递推式。这种处理问题的方法能使复杂运算化为若干步重复的简单运算,充分发挥出计算机擅长于重复处理的特点。递推算法的首要问题是得到相邻的数据项间的关系(即递推关系)。递推算法避开了求通项公式的麻烦

2、,把一个复杂的问题的求解,分解成了连续的若干步简单运算。一般说来,可以将递推算法看成是一种特殊的迭代算法。【例1】数字三角形。如下所示为一个数字三角形。请编一个程序计算从顶到底的某处的一条路径,使该路径所经过的数字总和最大。只要求输出总和。1、一步可沿左斜线向下或右斜线向下走;2、三角形行数小于等于100;3、三角形中的数字为0,1,…,99;测试数据通过键盘逐行输入,如上例数据应以如下所示格式输入:5738810274445265【算法分析】此题解法有多种,从递推的思想出发,设想,当从顶层沿某条路径走到第i层向第i+1层前进时,我们的选

3、择一定是沿其下两条可行路径中最大数字的方向前进,为此,我们可以采用倒推的手法,设a[i][j]存放从i,j出发到达n层的最大值,则a[i][j]=max{a[i][j]+a[i+1][j],a[i][j]+a[i+1][j+1]},a[1][1]即为所求的数字总和的最大值。【参考程序】#includeusingnamespacestd;intmain(){intn,i,j,a[101][101];cin>>n;for(i=1;i<=n;i++)for(j=1;j<=i;j++)cin>>a[i][j];//输入数字三角

4、形的值for(i=n-1;i>=1;i--)for(j=1;j<=i;j++){if(a[i+1][j]>=a[i+1][j+1])a[i][j]+=a[i+1][j];//路径选择elsea[i][j]+=a[i+1][j+1];}cout<0),输出铺法总数。【算法分析】(1)面对上述问题,如果思考方法不恰当,要想获得问题的解答是相当困难的。可以用递推方法归纳出问题解的一般规律。(2)当n=1时,只能是

5、一种铺法,铺法总数有示为x1=1。(3)当n=2时:骨牌可以两个并列竖排,也可以并列横排,再无其他方法,如下左图所示,因此,铺法总数表示为x2=2;(4)当n=3时:骨牌可以全部竖排,也可以认为在方格中已经有一个竖排骨牌,则需要在方格中排列两个横排骨牌(无重复方法),若已经在方格中排列两个横排骨牌,则必须在方格中排列一个竖排骨牌。如上右图,再无其他排列方法,因此铺法总数表示为x3=3。由此可以看出,当n=3时的排列骨牌的方法数是n=1和n=2排列方法数的和。(5)推出一般规律:对一般的n,要求xn可以这样来考虑,若第一个骨牌是竖排列放置,

6、剩下有n-1个骨牌需要排列,这时排列方法数为xn-1;若第一个骨牌是横排列,整个方格至少有2个骨牌是横排列(1*2骨牌),因此剩下n-2个骨牌需要排列,这是骨牌排列方法数为xn-2。从第一骨牌排列方法考虑,只有这两种可能,所以有:xn=xn-1+xn-2(n>2)x1=1x2=2xn=xn-1+xn-2就是问题求解的递推公式。任给n都可以从中获得解答。例如n=5,x3=x2+x1=3x4=x3+x2=5x5=x4+x3=8下面是输入n,输出x1~xn的c++程序:#includeusingnamespacestd;in

7、tmain(){intn,i,j,a[101];cout<<"inputn:";//输入骨牌数cin>>n;a[1]=1;a[2]=2;cout<<"x[1]="<

8、46269问题的结果就是有名的斐波那契数。【例3】棋盘格数设有一个N*M方格的棋盘(l≤N≤100,1≤M≤100)。求出该棋盘中包含有多少个正方形、多少个长方形(不包括正方形)。例如:当N=

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。