用pascal编写:有一对雌雄兔,每两个月就繁殖雌雄各一对兔子.问n个月后共有多少对兔子?

2025-12-16 12:19:35
推荐回答(3个)
回答1:

var m,n:qword;
a:array [1..93] of qword;
b:array [1..93] of boolean;

function p(x:qword):qword;
var t:qword;
begin
if b[x] then exit(a[x])
else
begin
t:=p(x-1)+p(x-2);
a[x]:=t;
b[x]:=true;
exit(t);
end;
end;

begin
readln(n);
a[1]:=1;
a[2]:=1;
b[1]:=true;
b[2]:=true;
writeln(p(n));
end.

非高精度递归做法。
b[k]=true 表示k已经计算过,直接调用a里以前算出来的数

回答2:

var
n,i,a,b,c:integer;
begin
a:=1;
b:=1;
readln(n);
if n=1 then writeln(1);
if n=2 then writeln(1);
if n>=3 then
begin
for i:=3 to n do
begin
c:=a+b;
a:=b;
b:=c;
end;
writeln(b);
end;
end.

回答3:

方法一:递推
var a:array[1..10000] of longint;
i,n:longint;
begin
readln(n);
a[1]:=1;
a[2]:=1;
for i:=3 to n do a[i]:=a[i-1]+a[i-2];
writeln(a[n]);
end.
方法二:通项公式
var n:longint;
begin
readln(n);
writeln( (exp(ln(1+sqrt(5)/2)*n)+exp(ln(1-sqrt(5))*n))/sqrt(5) );
end.
临时打的,可能有细节部分语法错误,请自己修改。