pascal程序求 1/1+1/2+2/3+3/5+5/8+8/13+13/21+21/32+...前20相的值(请用for循环写)

来源:百度知道 编辑:UC知道 时间:2024/04/28 01:19:30
pascal程序求 1/1+1/2+2/3+3/5+5/8+8/13+13/21+21/32+...前20相的值(请用for循环写)

各项若拆开来是fibonacci数列f(n)=f(n-1)+f(n-2)
program t;
var i:integer;
t:real;
a:array[1..21]of real;
begin
a[1]:=1;
a[2]:=1;
for i:=3 to 21 do a[i]:=a[i-1]+a[i-2];{生成fibonacci数列}
t:=0;
for i:=1 to 20 do t:=t+a[i]/a[i+1];{由式子特点推出,累加}
writeln(t);
end.
如有错误请自己改一下,我不测了。
条理很清晰吧,看不懂再问。
如果项数很大,可以采用迭代,参见一楼算法。

各位大牛写得都很不错,不过貌似可以简单点
var sum,a,b,d:real;
c:integer;
begin
sum:=0;
a:=1;b:=1;
for c:=1 to 20 do
begin
sum:=sum+a/b;
d:=b;
b:=a+b;
a:=d;
end;
writeln(sum);
end.
并且,原体的最后一项应该是21/34吧~~~@_@

program sum;
var
i,temp:integer;
j:real;
fz,fm:integer;
begin
fz:=1;fm:=1;j:=0;
write(fz,'/',fm);
for i:=1 to 20 do begin
j:=j+fz/fm;
temp:=fm;{这一步很重要}
fm:=fz+fm;
fz:=temp;{没有上上一步会在此出错}
write('+',fz