斐波那契数列
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
斐波那契数列
姓名:林秋照学号:092312113
比萨的列奥纳多,又称斐波那契(Leonardo Pisano ,Fibonacci, Leonardo Bigollo,1175年-1250年),意大利数学家,是西方第一个研究斐波那契数的人,并将现代书写数和乘数的位值表示法系统引入欧洲,1202年,莱昂纳多斐波那契向世人介绍了斐波那契数列,是为了解决“兔子繁殖问题”提出的。斐波那契在《算盘书》中提出了一个有趣的兔子问题:一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔都不死,那么一年以后可以繁殖多少对兔子?
我们不妨拿新出生的一对小兔子分析一下:
第一个月小兔子没有繁殖能力,所以还是一对;
两个月后,生下一对小兔总数共有两对;
三个月以后,老兔子又生下一对,因为小兔子还没有繁殖能力,所以一共是三对;
……
依次类推可以列出下表:
表中数字1,1,2,3,5,8---构成了一个序列。这个数列有关十分明显的特点,那是:前面相邻两项之和,构成了后一项。
这个数列是意大利中世纪数学家斐波那契在《算盘书》中提出的,这个级数的通项公式,除了具有an+2=an+an+1的性质外,还可以证明通项公式为:an=1/√5 [(1/2+√5/2)^ n-(1/2-√5/2)^n](n=1,2,3.....)(√5表示根号5)
这个通项公式中虽然所有的an都是正整数,可是它们却是由一
些无理数表示出来的。
即在较高的序列,两个连续的“斐波纳契数”的序列相互分割
将接近黄金比例(1.618:1或1:0.618)。
例如:233/144,987/610、、、、
斐波那契数列还有两个有趣的性质
⒈斐波那契数列中任一项的平方数都等于
兔子问题
跟它相邻的前后两项的乘积加1或减1;
⒉任取相邻的四个斐波那契数,中间两数之积(内积)与两边两数之积(外积)相差
1.
同样我们还可以有t阶斐波那契数列,通过递推数列a(n+t)=a(n+t-1)+a(n+t-2)+...+a(n),其中a⑴=a⑵=1,以及对于3-t<=n<=0,有a(n)=0.
给出了t阶斐波那契数列的通项公式:
[r^(n-1)(r-1)/((t+1)r-2t)],其中r是方程x^{t+1}-2x^t+1=0的唯一一个大于1的正数根(可以看出r非常接近2)
斐波那契数列(意大利语:Successione di Fibonacci),又称黄金分割数列、费波那西数列、费波拿契数、费氏数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=Fn-1+Fn-2(n>=2,n∈N*),用文字来说,就是斐波那契数列由0 和1 开始,之后的斐波那契数列系数就由之前的两数相加。
这个数列可以用一个简单的递推式和两个初始条件来定义:
当n>1时,F(n)=F(n-1)+F(n-2)
F(0)=0,F(1)=1
在这个数列中的数字,被称为斐波那契数。2是第3个斐波那契数。这个级数与大自然植物的关系极为密切。几乎所有花朵的花瓣数都来自这个级数中的一项数字:菠萝表皮方块形鳞苞形成两组旋向相反的螺线,它们的条数必须是这个级数中紧邻的两个数字(如左旋8行,右旋13行);还有向日葵花盘……倘若两组螺线条数完全相同,岂不更加严格对称?可大自然偏不!直到最近的1993年,人们才对这个古老而重要的级数给出真正满意的解释:此级数中任何相邻的两个数,次第相除,其比率都最为接近0.618034……这个值,它的极限就是所谓的"黄金分割数"。
自从斐波那契数列提出以来,不仅在自然界发现了许多和斐波那契数列相关的例子,而且人们还利用斐波那契数列来预测商品和证券的价格;在计算机科学领域,斐波那契数列也有许多令人感兴趣的应用,在本篇中我们要找到一个求第n个斐波那契数的精确公式,然
后来讨论一下计算斐波那契数列的算法。主要讨论三种方法递归、迭代、和通项公式三种方法。
第一种方法:递归法
实现代码:
#include
#include
Int fib(int n)
{
if(n <= 1)
{
return n;
}
else
{
return fib(n - 1) + fib(n - 2);
}
}
概述递归做为一种算法在程序设计语言中广泛应用.是指函数/过程/子程序在运行过程中直接或间接调用自身而产生的重入现象.递归是计算机科学的一个重要概念,递归的方法是程序设计中有效的方法,采用递归编写程序能使程序变得简洁和清晰.。
定义:
一般定义:程序调用自身的编程技巧称为递归(recursion)。
一个过程或函数在其定义或说明中又直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。注意:
(1) 递归就是在过程或函数里调用自身;
(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
其它定义:
递归的另一种定义:递归,就是用自己的简单情况,定义自己,即自己调用自己。
在数学和计算机科学中,递归指由一种(或多种)简单的基本情况定义的一类对象或方法,并规定其他所有情况都能被还原为其基本情况。例如,下列为某人祖先的递归定义:某人的双亲是他的祖先(基本情况)。某人祖先的双亲同样是某人的祖先(递归步骤)。斐波那契数列是典型的递归案例:Fib(0) = 0 [基本情况] Fib(1) = 1 [基本情况] 对所有n > 1的整数:Fib(n) = (Fib(n-1) + Fib(n-2)) [递归定义] 尽管有许多数学函数均可以递归表示,但在实际应用中,递归定义的高开销往往会让人望而却步。