斐波那契数列(Fibonacci)

来源:互联网 发布:日语识别扫描软件 编辑:程序博客网 时间:2024/04/29 23:05

—在自然界中,很多想象都符合斐波那契数列,如植物的叶、花、茎等排列中都可找到这种规律。

首先看一个著名的、经典的斐波那契数列例子:兔子家族
——斐波那契在他的《算盘书》中提出这样一个问题:有人想知道一年内一对兔子可繁殖成多少对,便筑了一道围墙把一对兔子关在里面。已知一对兔子每一个月可以生一对小兔子(假设每产一对兔子必须为一雌一雄),而一对兔子出生后第二个月就开始生小兔子。假如一年内没有发生死亡,则一对兔子一年内能繁殖成多少对?

根据题意可以知道,每个月的兔子数量和上个月以及上上个月的数量密切相关
第一月:1对小兔。
第二月:1对成年兔。
第三月:1对成年兔+第二月成年兔所生小兔1对。
第四月:2对成年兔+第三月成年兔所生小兔1对。
第五月:3对成年兔+第三月成年兔所生小兔2对。
……
若设F(n)表示第n个月的兔子数量,则:
F(1) = 1
F(2) = 1
F(3) = F(2)+F(1) = 1+1 = 2
F(4) = F(3)+F(2) = 2+1 = 3
F(5) = F(4)+F(3) = 3+2 = 5
……
不难发现,从第三个月开始,后一个月的兔子总数为前两个月数量之和,即:
F(n)=F(n-1)+F(n-2) (n>2)
这样很快便可以得出一年之后的兔子为144对。各个月份的兔子数量组成了一个序列,即:
1 、1 、2 、3 、5 、8、13 、21 、34 、55 、89 、144 、……
这个序列从第三项起,每一项都等于前两项之和,这样的序列就称为斐波那契数列。而在数学上,可以通过递归的方法来定义:

F0=0F1=1Fn=Fn1+Fn2 n =0 (F0) n =1  n2

此算法的复杂度为O(n)2
C语言代码实现:

#include<stdio.h>typedef long long LL;LL Fib(LL n){    if(n==0) return 0;    else if(n==1) return 1;    else return Fib(n-1)+Fib(n-2);}int main(){    LL f,i;    while(~scanf("%lld",&f))    printf("F(%lld)=%lld\n",f,Fib(f));    return 0;}

当然,在数据较大的时候,递归很慢,那不用递归要如何实现呢(方法貌似有很多,然而我并不会。。。orz)?
斐波那契数(又称黄金数列,当n趋近与无穷大时,数列后项与前项的比值的极限为黄金分割比)与黄金分割率及其共轭数有关,它们是下列线性递推特征方程的两个根:

x2=x+1

解得:
x1=1+52x2=152

所以F(n)=C1xn1+C2xn2
将初始条件F(1)=1F(2)=1 带入解得C1=15,C2=15
所以得计算第n项斐波那契数公式:
F(n)=15[(1+52)n(152)n]
斐波那契数列的题目时常遇到,
如HDU2044 一只小蜜蜂、

#include <stdio.h>#define N 51 int main(){    int i,a, b, n;    __int64 d[N] = {1, 1, 2,};    for (i = 3; i < N; i++)        d[i] = d[i-1] + d[i-2];    scanf("%d", &n);    while (n-- && scanf("%d%d", &a, &b) != EOF)        printf("%I64d\n", a > b ? 0 : d[b-a]);    return 0;}

HDU2041 超级楼梯、

#include<stdio.h>int main(){    int i,N,M;    __int64 f[40],kind=0;    f[1]=0,f[2]=1,f[3]=2;    for(i=4;i<=40;i++)        f[i]=f[i-1]+f[i-2];    scanf("%d",&N);    while(N--){        scanf("%d",&M);        printf("%I64d\n",f[M]);    }    return 0;}

HDU1568 Fibonacci(用到上文公式)、
到这个题的数据范围,0(n)的时间复杂度是不行的。那么肯定有什么公式(即上文公式),不过要先对公式取对数。详情请自行百度该题题解(毕竟我也是看了题解的,,,,,,orz)。
取完对数之后

题目很多,有兴趣可以做一下、

斐波那契的应用及其广泛,如许多人将黄金分割比和斐波那契数用来分析股市。在自然界中也随处可见,如蜜蜂的繁殖规律、向日葵种子排列方式、菠萝果实上的菱形鳞片的排列、树的分枝、仙人掌的结构、钢琴音阶的排列以及花瓣对称排列在花托边缘、整个花朵几乎完美无缺地呈现出辐射对称状……(感兴趣可自行了解),这个数列既是数学美的完美体现,又与许多数学概念有着密切的联系,很多看上去似乎彼此独立的数学概念,通过斐波那契数列,人们发现了其中的数学联系。从而进一步激发了人们探索数学的兴趣.对数学的认知更加系统化。因此对斐波那契数列的研究是一项非常重要的研究,它不仅能给各个学科带来很好的用处,它也会对我们的生活产生长远的影响,斐波那契数列的前景是不可估量的.
更多有关斐波那契数列信息请百度百科 斐波那契数列
(ps:不足之处,还望各位不吝赐教)

0 0
原创粉丝点击