斐波那契数列

来源:互联网 发布:com域名和cn域名 编辑:程序博客网 时间:2024/05/19 14:52

斐波那契数列

斐波那契数列,又称黄金分割数列,指的是这样一个数列:01123581321……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0F1=1Fn=F(n-1)+F(n-2)n>=2nN*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1960年代起出版了《斐波纳契数列》季刊,专门刊载这方面的研究成果。

递推公式

斐波那契数列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...[1]

如果设F(n)为该数列的第n项(nN*),那么这句话可以写成如下形式:[1]

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

通项公式

(如上,又称为比内公式,是用无理数表示有理数的一个范例。)

注:此时a1=1a2=1an=a(n-1)+a(n-2)n>=3,nN*

现有长为144cm的铁丝,要截成n小段(n>2),每段的长度不小于1cm,如果其中任意三小段都不能拼成三角形,则n的最大值为多少?

分析:由于形成三角形的充要条件是任何两边之和大于第三边,因此不构成三角形的条件就是任意两边之和不超过最大边。截成的铁丝最小为1,因此可以放21,第三条线段就是2(为了使得n最大,因此要使剩下来的铁丝尽可能长,因此每一条线段总是前面的相邻2段之和),依次为:11235813213455,以上各数之和为143,与144相差1,因此可以取最后一段为56,这时n达到最大为10

有一段楼梯有10级台阶,规定每一步只能跨一级或两级,要登上第10级台阶有几种不同的走法?

这就是一个斐波那契数列:登上第一级台阶有一种登法;登上两级台阶,有两种登法;登上三级台阶,有三种登法;登上四级台阶,有五种登法……

1235813……所以,登上十级,有89种走法。

类似的,一枚均匀的硬币掷10次,问不连续出现正面的可能情形有多少种?

答案是(1/√5)*{[(1+√5)/2]^(10+2) - [(1-√5)/2]^(10+2)}=144种。

一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔子都不死,那么一年以后可以繁殖多少对兔子?

我们不妨拿新出生的一对小兔子分析一下:

第一个月小兔子没有繁殖能力,所以还是一对

两个月后,生下一对小兔对数共有两对

三个月以后,老兔子又生下一对,因为小兔子还没有繁殖能力,所以一共是三对

------

依次类推可以列出下表:

经过月数

0

1

2

3

4

5

6

7

8

9

10

11

12

幼仔对数

1

0

1

1

2

3

5

8

13

21

34

55

89

成兔对数

0

1

1

2

3

5

8

13

21

34

55

89

144

总体对数

1

1

2

3

5

8

13

21

34

55

89

144

233

幼仔对数=前月成兔对数

成兔对数=前月成兔对数+前月幼仔对数

总体对数=本月成兔对数+本月幼仔对数

可以看出幼仔对数、成兔对数、总体对数都构成了一个数列。这个数列有关十分明显的特点,那是:前面相邻两项之和,构成了后一项。

这个数列是意大利中世纪数学家斐波那契在<算盘全书>中提出的,这个级数的通项公式,除了具有a(n+2)=an+a(n+1)的性质外,还可以证明通项公式为:an=(1/√5)*{[(1+√5)/2]^n-[(1-√5)/2]^n}n=1,2,3.....

 

public class Fibonacci {    public static int Fibonacci1(int n){    if(n==0||n==1)    return 1;    else{    return Fibonacci1(n-1)+Fibonacci1(n-2);    }    }    public static int Fibonacci2(int n){    int f = 0,f0=1,f1=1;    if(n==0||n==1)    return 1;    else{    for(int i=0;i<=(n-2);i++)        {    f=f0+f1;    f0=f1;    f1=f;    }    return f;    }    }public static void main(String[] args) {// TODO Auto-generated method stubfor(int i=0;i<=12;i++){System.out.println(Fibonacci2(i));System.out.println(Fibonacci1(i));}}}

0 0