斐波那契数列(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 、……
这个序列从第三项起,每一项都等于前两项之和,这样的序列就称为斐波那契数列。而在数学上,可以通过递归的方法来定义:
此算法的复杂度为
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趋近与无穷大时,数列后项与前项的比值的极限为黄金分割比)与黄金分割率及其共轭数有关,它们是下列线性递推特征方程的两个根:
解得:
所以
将初始条件
所以得计算第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:不足之处,还望各位不吝赐教)
- 斐波那契(Fibonacci)数列
- 斐波那契数列(Fibonacci)
- 斐波那契(Fibonacci)数列
- 斐波那契数列(Fibonacci)
- 斐波那契(Fibonacci)数列
- 斐波那契(Fibonacci)数列
- 斐波那契数列(Fibonacci)
- 斐波那契数列(Fibonacci)
- 斐波那契Fibonacci数列
- 斐波那契 (Fibonacci)数列
- Fibonacci(斐波那契)数列实现
- 斐波那契(Fibonacci)数列
- 斐波那契数列 Fibonacci sequence
- 斐波那契数列-Fibonacci Sequence
- Fibonacci(斐波那契数列)
- 斐波那契数列(fibonacci)
- Fibonacci斐波那契数列序列
- 斐波那契数列Fibonacci
- MyEclipse10.7使用Maven搭建Struts2+Spring3+Hibernate4的整合开发环境
- spring(12) Spring的通过工厂方法配置Bean
- 第64讲Scala中的隐式类分析
- 八梦网络工作室 DEDE模板下载 网络工作室源码模板下载
- 在Xcode中git的简单使用
- 斐波那契数列(Fibonacci)
- Oracle对没有主键的表分页
- windows窗口属性详解
- Android shape 详解
- I hate it (线段树)
- JSP页面org.apache.jasper.JasperException异常处理
- 表达树构造(java)
- Linux Generating SSH keys for GitHub
- Sublime Text 3.0 --- 值得去学习的一款文本代码编辑器