递推

递推算法是一种用若干步可重复运算来描述复杂问题的方法,是一种用若干步可重复的简运算(规律)来描述复杂问题的方法。
递推是序列计算机中的一种常用算法。它是按照一定的规律来计算序列中的每个项,通常是通过计算机前面的一些项来得出序列中的指定象的值。其思想是把一个复杂的庞大的计算过程转化为简单过程的多次重复,该算法利用了计算机速度快和不知疲倦的机器特点。
递推算法
【例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;
本程序的递推运算可用下图示表示:
初始值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

你可能感兴趣的:(递推)