递归的很多问题可以转为递推(来处理,通常递推处理的效率比递归高得多。比如象阶乘、 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.
五年级上册解方程练… | 255457 |
九连环图解解法 | 226892 |
wifi万能钥匙破解的… | 177863 |
纸飞机Skyking(空… | 170844 |
小学语文知识大全(… | 152076 |
各种鱼钩鱼线绑法与… | 117013 |
课题研究的方法有哪些 | 113473 |
人教版pep小学英语… | 104571 |
小学语文知识大全(… | 96818 |
人教版pep小学英语… | 96209 |
小学数学五年级上册… | 93451 |
人教版pep小学英语… | 82587 |
小学语文知识大全(… | 80413 |
笔记本电脑如何关闭… | 79825 |
小学生六一搞笑小品… | 78892 |
不打结的红领巾系法… | 78083 |