斐波那契数列问题

某农场引进一对刚出生的新品种兔子,从出生的第二个月后,每月新生一对兔子,新出生兔子也如此繁殖,如果所有兔子每长到第5个月就会死亡,那么到第N个月时,该农场共有这种兔子多少... 某农场引进一对刚出生的新品种兔子,从出生的第二个月后,每月新生一对兔子,新出生兔子也如此繁殖,如果所有兔子每长到第5个月就会死亡,那么到第N个月时,该农场共有这种兔子多少对呢?
例如:
N=1时,结果是1
N=2时,结果是1
N=3时,结果是2
N=8时,结果是8

TO BD1 :S :B
IF EMPTY? :B [OP :S]
BD1 :S+____ BF :B
END
TO BD2 :N :B
IF :N=____[OP :B]
MAKE "B BL :B
MAKE "B SE (BD1 0____):B
BD2 :N-1 :B
END
TO BD :N
PR BD1 0 BD2 :N[_______]
END
执行:BD 2
结果:1
展开
 我来答
风逝NT
2008-06-25 · TA获得超过1888个赞
知道小有建树答主
回答量:615
采纳率:50%
帮助的人:350万
展开全部
斐波那契数列的通项公式:
F(N)=0 当N=0,
F(N)=1 当N=1,2
F(N)=F(N-1)+F(N-2) 当N>2

又叫“比内公式”,是用无理数表示有理数的一个范例
F(N)=1/√5)*{[(1+√5)/2]^n - [(1-√5)/2]^n}
似乎你要的是个计算机的程序填空,不过我没看懂那是什么语言的程序

第2个通项明显不适合计算机求解,编程要用第一个,主要是递归的问题

下面是百度查找到的哦:
【斐波那挈数列通项公式的推导】

斐波那契数列:1,1,2,3,5,8,13,21……

如果设F(n)为该数列的第n项(n∈N+)。那么这句话可以写成如下形式:
F(1)=F(2)=1,F(n)=F(n-1)+F(n-2) (n≥3)

显然这是一个线性递推数列。

通项公式的推导方法一:利用特征方程

线性递推数列的特征方程为:
X^2=X+1
解得
X1=(1+√5)/2, X2=(1-√5)/2.

则F(n)=C1*X1^n + C2*X2^n
∵F(1)=F(2)=1
∴C1*X1 + C2*X2
C1*X1^2 + C2*X2^2
解得C1=1/√5,C2=-1/√5

∴F(n)=(1/√5)*{[(1+√5)/2]^n - [(1-√5)/2]^n}【√5表示根号5】

通项公式的推导方法二:普通方法

设常数r,s
使得F(n)-r*F(n-1)=s*[F(n-1)-r*F(n-2)]
则r+s=1, -rs=1

n≥3时,有
F(n)-r*F(n-1)=s*[F(n-1)-r*F(n-2)]
F(n-1)-r*F(n-2)=s*[F(n-2)-r*F(n-3)]
F(n-2)-r*F(n-3)=s*[F(n-3)-r*F(n-4)]
……
F(3)-r*F(2)=s*[F(2)-r*F(1)]

将以上n-2个式子相乘,得:
F(n)-r*F(n-1)=[s^(n-2)]*[F(2)-r*F(1)]
∵s=1-r,F(1)=F(2)=1
上式可化简得:
F(n)=s^(n-1)+r*F(n-1)

那么:
F(n)=s^(n-1)+r*F(n-1)
= s^(n-1) + r*s^(n-2) + r^2*F(n-2)
= s^(n-1) + r*s^(n-2) + r^2*s^(n-3) + r^3*F(n-3)
……
= s^(n-1) + r*s^(n-2) + r^2*s^(n-3) +……+ r^(n-2)*s + r^(n-1)*F(1)
= s^(n-1) + r*s^(n-2) + r^2*s^(n-3) +……+ r^(n-2)*s + r^(n-1)
(这是一个以s^(n-1)为首项、以r^(n-1)为末项、r/s为公差的等比数列的各项的和)
=[s^(n-1)-r^(n-1)*r/s]/(1-r/s)
=(s^n - r^n)/(s-r)

r+s=1, -rs=1的一解为 s=(1+√5)/2, r=(1-√5)/2
则F(n)=(1/√5)*{[(1+√5)/2]^n - [(1-√5)/2]^n}

【C语言程序】

main()
{
long fib[40] = {1,1};
int i;
for(i=2;i<40;i++)
{
fib[i ] = fib[i-1]+fib[i-2];
}
for(i=0;i<40;i++)
{
printf("F%d==%d\n", i, fib);
}
return 0;
}

【Pascal语言程序】
var
fib: array[0..40]of longint;
i: integer;
begin
fib[0] := 1;
fib[1] := 1;
for i:=2 to 39 do
fib[i ] := fib[i-1] + fib[i-2];
for i:=0 to 39 do
write('F', i, '=', fib[i ]);
end.

【数列与矩阵】

对于斐波那契数列1,1,2,3,5,8,13…….有如下定义
F(n)=f(n-1)+f(n-2)
F(1)=1
F(2)=1
对于以下矩阵乘法
F(n+1) = 1 1 * F(n)
F(n) 1 0 F(n-1)
它的运算就是
F(n+1)=F(n)+F(n-1)
F(n)=F(n)
可见该矩阵的乘法完全符合斐波那契数列的定义
设1 为B,1 1为C
1 1 0
可以用迭代得到:
斐波那契数列的某一项F(n)=(BC^(n-2))1
这就是斐波那契数列的矩阵乘法定义.
另矩阵乘法的一个运算法则A¬^n(n为偶数)=A^(n/2)* A^(n/2).
因此可以用递归的方法求得答案.
时间效率:O(logn),比模拟法O(n)远远高效。
代码(PASCAL)
{变量matrix是二阶方阵, matrix是矩阵的英文}
program fibonacci;
type
matrix=array[1..2,1..2] of qword;
var
c,cc:matrix;
n:integer;
function multiply(x,y:matrix):matrix;
var
temp:matrix;
begin
temp[1,1]:=x[1,1]*y[1,1]+x[1,2]*y[2,1];
temp[1,2]:=x[1,1]*y[1,2]+x[1,2]*y[2,2];
temp[2,1]:=x[2,1]*y[1,1]+x[2,2]*y[2,1];
temp[2,2]:=x[2,1]*y[1,2]+x[2,2]*y[2,2];
exit(temp);
end;
function getcc(n:integer):matrix;
var
temp:matrix;
t:integer;
begin
if n=1 then exit(c);
t:=n div 2;
temp:=getcc(t);
temp:=multiply(temp,temp);
if odd(n) then exit(multiply(temp,c))
else exit(temp);
end;
procedure init;
begin
readln(n);
c[1,1]:=1;
c[1,2]:=1;
c[2,1]:=1;
c[2,2]:=0;
if n=1 then
begin
writeln(1);
halt;
end;
if n=2 then
begin
writeln(1);
halt;
end;
cc:=getcc(n-2);
end;
procedure work;
begin
writeln(cc[1,1]+cc[1,2]);
end;
begin
init;
work;
end.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
紫竹冷霜
2008-06-25 · TA获得超过706个赞
知道小有建树答主
回答量:621
采纳率:0%
帮助的人:462万
展开全部
这好像不是斐波那契数列问题问题吧~~
斐波那契数列问题,一定是1,1,2,3,5,8,13,21~~
这样数量的兔子的算法应该是2的N次方减2的N-5次方(N〉=5)~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式