递推

来源:互联网 发布:手机淘宝排名怎么提升 编辑:程序博客网 时间:2024/04/30 03:38

递推

 

递推算法是一种用若干步可重复运算来描述复杂问题的方法.
中文名
递推
外文名
The Algorithm of Recursive
 
 
 
 

目录

  1. 1 基本介绍
  2. 2 递推算法

基本介绍

编辑
递推算法是一种用若干步可重复的简运算(规律)来描述复杂问题的方法.
递推是序列计算机中的一种常用算法。它是按照一定的规律来计算序列中的每个项,通常是通过计算机前面的一些项来得出序列中的指定象的值。其思想是把一个复杂的庞大的计算过程转化为简单过程的多次重复,该算法利用了计算机速度快和不知疲倦的机器特点。

递推算法

编辑
【例1】
植树节那天,有五位同学参加了植树活动,他们完成植树的棵树都不相同。问第一位同学植了多少棵时,他指着旁边的第二位同学说比他多植了两棵;追问第二位同学,他又说比第三位同学多植了两棵;... 如此,都说比另一位同学多植两棵。最后问到第五位同学时,他说自己植了10棵。到底第一位同学植了多少棵树?
分析:设第一位同学植树的棵树为a1,欲求a1,需从第五位同学植树的棵数a5入手,根据“多两棵”这个规律,按照一定顺序逐步进行推算:
(1) a5=10;
(2) a4=a5+2=12;
(3) a3=a4+2=14;
(4) a2=a3+2=16;
(5) a1=a2+2=18;
Pascal程序:
Program Examl;
Var i,a:byte;
begin
a:=10;
for i:= 1 to 4 do
a:=a+2;
writeln('The Num is' ,a);
readln;
end.
本程序的递推运算可用下图示表示:
初始值a:=10 ----- i=1,a=a+2(12) ----- i=2,a=a+2(14) ------ i=3,a=a+2(16) ----- i=4,a=a+2(18) ---- 输出a值
例2:
十本不同的书放在书架上。现重新摆放,使每本书都不在原来放的位置。有几种摆法?
当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用M(n)表示,那么M(n-1)就表示n-1个编号元素放在n-1个编号位置,各不对应的方法数,其它类推.
第一步,把第n个元素放在一个位置,比如位置k,一共有n-1种方法;
第二步,放编号为k的元素,这时有两种情况.1,把它放到位置n,那么,对于剩下的n-2个元素,就有M(n-2)种方法;2,不把它放到位置n,这时,对于这n-1个元素,有M(n-1)种方法;
综上得到
M(n)=(n-1)[M(n-2)+M(n-1)]
递推算法以初始(起点)值为基础,用相同的运算规律,逐次重复运算,直至运算结束。这种从“起点”重复相同的方法直至到达一定“边界”,犹如单向运动,用循环可以实现。递推的本质是按规律逐次推出(计算)先一步的结果。



例如:

问题一:三角形个数

从1,2,3,4,5......,n(n>=3)中选出三个不同的整数,可以组成三角形的个数

当n=3,0个

当n=4,1个

当n=5,   3个

......

设递推式:f(n)=  f (n-1)  +  c (n)

其中,c(n)为最大边长为n的三角形的个数

自己推得,c(n)=(n-3)(n-2)/2;

其中 ,最小条件,f(3)=0;


代码具体实现方式

递归(自顶向下)或打表(自底向上)


问题二:

求n!中含有素数m的整数因子的个数

n!=n*(n-1)*(n-2)......*2*1

即在n*(n-1)*(n-2)......*2*1中找km*(k-1)m*...*2m*m中含m的个数(即k+k-1+k-1+......+2+1)

令k=n/m,

所以:f(n)=n/m+f(n/m)   其中,当时s<m,f(s)=0


1 0
原创粉丝点击