计算机算法:递推法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
递推法
递推是计算机数值算法中的重要算法。递推的思路是通过数学推导将复杂的运算化解为若干重复的简单运算,以充分发挥计算机擅长重复处理的特点。
递推法通过已知条件,利用特定关系得出中间推论,直至得到结果的算法。
递推法的解题步骤:
⑴按次序研究集合中最初最原始的若干问题。
⑵按次序寻求集合中问题间的转换规律即递推关系,使问题逐次转化成较低层级或简
单的且能解决问题的或已解决的问题。
递推法在解题中的应用:递推法在解题中的应用十分广泛,递推法的特征是化难为易、化繁为简。使用递推法时,先考虑与题目有关系的另一个较为简单的问题,并加以解决。然后以此为基础,寻求规律,一步一步递推出原题的解答。按照推导问题的方向递推分为逆推法和顺推法两种。
所谓顺推法是从已知条件出发,逐步推算出要解决的问题的方法叫顺推。
所谓逆推法从已知问题的结果出发,用迭代表达式逐步推算出问题的开始的条件,即顺推法的逆过程,称为逆推。
示例1:逆推法示例。猴子第1天摘下若干个桃子,当即吃了一半又一个。第2天又把剩下的桃吃了一半有一个,以后每天都吃前一天剩下的桃子的一半又一个,到第10天猴子想吃的时候,只剩下一个桃子。问猴子第1天一共摘了多少桃子?
【分析】
已知条件第10天剩下1个桃子,隐含条件每一次前一天的桃子个数等于后一天桃子的个数加1的2倍。采用逆向思维的方法,从后往前推,可用逆推法求解。
【算法】算法描述如下:
#include
Main()
{ int a=1,I;
For (i=9;i>=1;i--)
a=(a+1)*2
Printf(“%d”,a);
}
示例2:顺推法示例。有一段楼梯有10段台阶,规定每一步只能跨一级或两级,问:要登上第10级台阶有多少种不同的走法?
【分析】
跨到第二级台阶,可以每次跨一级,也可以一次跨二级,共有2种不同的走法。
第三级台阶,可以由第一级台阶跨二级台阶到达,也可以由第二级台阶跨一级到达。而到达第一级和第二级台阶各有1、2种不同的走法,所以到达第三级台阶共有1+2=3种不同的走法。以下类推。所以,登上第三阶、第四阶、…的不同走法次数依次为登上它的前两个台阶走法数的和。即依次为1,2,3,5,8,13,21,34,55,89,…
所以登上第十级台阶共有89种不同的走法。这列数为斐波纳次数列。
【算法】算法用伪代码描述如下:
f1=1;
f2=2;
For n=3 to 10 do
{f n=f n-1+f n-2;
writeln(f n);
}
由此可见递推关系是一种简洁高效的常见数学模型。在递推问题中,每个数据项都和它前面的若干个数据项(或后面的如干个数据项)有一定的关联,这种关联一般通过“递推关系式”表示。问题求解一般从初始的一个或如干个数据项出发,通过递推关系逐步推出,从而得到最终结果,这种求解问题的方法叫“递推法”。其中初始的如干数据项成为“边界”。
。