您现在的位置:小学生自学网>> 信息>> 学习电脑

5递推算法

作者: 来源: 发布时间:2009年01月14日 点击数:
 

递归的很多问题可以转为递推(来处理,通常递推处理的效率比递归高得多。比如象阶乘、 Fibonacci数列等。它们的相邻数之间有着明显的规律性的变化,通常可以将递归结束的条件作为递推的初始条件,并利用这种规律性一步一步递推到结果。这种递推通常采用循环迭代的方法,如循环累乘、循环累加等。

如递归中的例 1转为递推算法时用循环累加来实现。

var f0,f1,f2:real;
    i,n:byte;
begin
     readln(n);
     f0:=1;f1:=2;
     for i:=2 to n do
     begin
          f2:=f0+f1;
          f0:=f1;
          f1:=f2
     end;
     writeln(f2:1:0)
end.

在用递归算法时,只要输入的 n值稍大,程序求解就很困难,而递推则效率高很多。

计算递归算法中的例 3时,如果将自然数 n的范围扩大到 1500以内,则用递归算法递归调用的次数过多,在求 800以上的数的时候就会出现困难,但用递推却可以大大缩小问题的规模。

递归算法中例 3的递推程序:

var s:array[1..1500] of real;
    i,j,n:integer;
begin
     readln(n);
     for i:=1 to n do s[i]:=1;
     for i:=2 to n do
     if odd(i) then s[i]:=s[i-1]
     else
        for j:=1 to i div 2 do
             s[i]:=s[i]+s[j];
     writeln(s[n]:2:0)
end.

上一篇:4归纳

下一篇:6递归