兔子数问题
学会用MATLAB编写含递推关系的程序.
1 斐波那契数
斐波那契数列的定义者,是意大利数学家列昂纳多•斐波那契(Leonardo Fibonacci),生于公元1170年,卒于1250年,籍贯是比萨。他被人称作“比萨的列昂纳多”。1202年,他撰写了《算盘全书》(Liber Abacci)一书。他是第一个研究了印度和阿拉伯数学理论的欧洲人。他的父亲被比萨的一家商业团体聘任为外交领事,派驻地点相当于今日的阿尔及利亚地区,列昂纳多因此得以在一个阿拉伯老师的指导下研究数学。他还曾在埃及、叙利亚、希腊、西西里和普罗旺斯等地研究数学。
斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368...
一般地,设 月末有 对兔子.注意到当月末的兔子数等于上月末的兔子数与本月末新兔子数之和,而本月末新兔子数等于前个月末的兔子数,于是有递推关系
记当月初的兔子数为 ,月末兔子数为,第二个月末兔子数为,按递推关系可得各月末的兔子对数如下:
月份n 0 1 2 3 4 5 6 7 8 9 10 11 12 13 … 兔子数Fn 1 1 2 3 5 8 13 21 34 55 89 144 233 377 …
兔子数数列称为斐波那契(Fibonacci)数列,斐波那契数列中的每一项都称作斐波那契数.
斐波那契数与植物的关系十分密切,几乎所有花朵的花瓣数都是斐波那契数;菠萝表皮方形鳞苞形成两组旋向相反的螺线,它们的条数是相邻的两个斐波那契数(如左旋8行,右旋13行),…….
斐波那契数在日常生活中也有体现,假如上楼梯每一步可以跨1级或2级台阶,则登上第n级台阶的方式数就是斐波那契数Fn.
斐波那契数列有许多奇妙的性质,有兴趣的读者可以利用MATLAB编程验证:
性质1 ;
性质2 ;
性质3 ;
性质4
性质7
22.2 实验内容
【例1】 编写一个能产生斐波那契数的程序,问第50个月末会有几对兔子?
解 根据斐波那契数的递推关系Fk=Fk-1+Fk-2,容易编写一个生成斐波那契数的程序(因为MATLAB中数组下标总是从1开始,所以这里也从F1=1,F2=2开始,略去F0=1):
format long
F=[1,2];
for k=3:50
F(k)=F(k-1)+F(k-2);
end
F(50)
ans =2.036501107400000e+10
即第50个月后将有20 365 011 074(200多亿)对兔子!
注意到
或转置变为
生成斐波那契数的程序也可以如下编写:
format long
A=[1 1;1 0];
F=[1,2];
for k=3:50
F([k,k-1])=F([k-1,k-2])*A;
end
F(50)=2.036501107400000e+10
与斐波那契数列有关的数学甚至科学问题有许多有意思的研究,感兴趣的读者可以参阅下面
TED中关于斐波那契数列的著名演讲.