编程求出不大于一千的最大斐波那契数编程

下次自动登录
现在的位置:
& 综合 & 正文
编程网格:斐波那契数
(可能会打不开,会有权限限制)
斐波那契数列是指如下数列: F(0)=0, F(1)=1, F(n)=F(n-1)+F(n-2).数列的前10个数如下:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, …
对于给定的数n,请求出F(n)的后四个数字.
附源码:(编程环境:VS2010)
#include&iostream&
#include&algorithm&
struct Matrix
{long long int f11;long long int f12;long long int f21;long long int f22;
Matrix multiply(Matrix m1,Matrix m2)
{Mtemp.f11=(m1.f11*m2.f11+m1.f12*m2.f21)%100000;temp.f12=(m1.f11*m2.f12+m1.f12*m2.f22)%100000;temp.f21=(m1.f21*m2.f11+m1.f22*m2.f21)%100000;temp.f22=(m1.f21*m2.f12+m1.f22*m2.f22)%100000;
Matrix Fibo(int n)
{Minit.f11=1;init.f12=1;init.f21=1;init.f22=0;Mif(n==1){}if(n%2==0){temp=Fibo(n/2);temp=multiply(temp,temp);}else{temp=Fibo((n-1)/2);temp=multiply(temp,temp);temp=multiply(temp,init);}
int main()
{while(cin&&n){if(n==-1){}if(n==0){cout&&0&&}else if(n==1){cout&&1&&}else{Matrix result=Fibo(n);cout&&result.f12%10000&&}}return 0;
【上篇】【下篇】美丽的斐波那契数列【scratch实现】
中国少儿编程网 o
  本节课我们跟小朋友一起认识一下什是斐波那契数列,然后我们通过scratch来实现自动计算。   斐波那契数列指的是这样一组数 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,,,1,2   特别指出:第一个数是0,第二个数是1,从第三个数开始,每一项都等于前两项之和。   斐波那契数列的由来   13 世纪意大利数学家斐波那契在他的《算盘书》的修订版中增加了一道著名的兔子繁殖问题。问题是这样的:如果每对兔子(一雄一雌) 每月能生殖一对小兔子( 也是一雄一雌,下同)每对兔子第一个月没有生殖能力,但从第二个月以后便能每月生一对小兔子假定这些兔子都没有死亡现象,那么从第一对刚出生的兔子开始,12个月以后会有多少对兔子呢?   这个问题的解释如下:第一个月只有一对兔子;第二个月仍然只有一对兔子;第三个月这对兔子生了一对小兔子,共有1+l =2 对兔子;第四个月最初的一对兔子又生一对兔子,共有2+l =3对兔子;则由第一个月到第十二个月兔子的对数分别是: l , l , 2 , 3 , 5 , 8 ,13 , 21 , 34 , 55 ,89,144 , …… , 后人为了纪念提出兔子繁殖问题的斐波那契,将这个兔子数列称为斐波那契数列,学术界又称为黄金分割数列。   自斐波那契数列产生至今,人们对其研究为何经久不衰?一大原因就是对其研究有极大的益处。    1. 斐波那契数列在数学中的应用
  关于斐波那契数列在数学中的应用,最经典的例子就是爬楼梯问题。一个人要爬十级台阶的楼梯,规定每一步只能跨一级或者两级台阶,则一共有多少种方法爬上这个十级台阶的楼梯?分析过程是:爬上一级台阶只有一种方法,二级台阶有两种方法,三级台阶有三种方法,四级台阶有五种方法,五级台阶有八种方法,六级台阶有十三种……即1,2,3,5,8,13,……,所以爬上十级台阶的楼梯共有88种方法。如果要爬n阶台阶呢?除了爬楼梯问题,还有许多数学问题可以通过斐波那契数列解决。   2、自然界中的斐波那契数列   在自然界中,许多事物本身蕴含的规律都跟斐波那契数列有关。例如树木的生长,由于新生的枝条,往往需要一段“休息”时间,供自身 生长,之后才萌发新枝。因此,一株树苗在一段时间间隔后,例如一年,会长出一条新枝;第二年新枝“休息”,老枝依旧萌发;此后,老枝与“休息”过一年的枝同时萌发,当年生的新枝则次年“休息”。这样,一株树木各个年份的枝桠数,便构成斐波那契数列。这就是生物学上著名的“鲁德维格定律”。   
  或许有人会说树木生长符合斐波那契数列的规律是一个巧合,其实不仅仅是树木的生长问题,植物的花瓣、叶子、花蕊的数目都和这斐波那契数列有关。像梅花有5片花瓣,李树也是5片花瓣,鸢尾花、百合花(看上去是6片,实际上是两套3片)是3片花瓣,许多翠雀属植物的花瓣是8片,万寿菊的花瓣有1 3片,紫菀属植物的花有21瓣,大多数雏菊有34、55、89片花瓣。这些数字的花瓣在植物界很常见,而其他数字的就相对很少。这些数字按其大小排列起来,就是3、5、8、13、21、34、55、89……,也就是我们所说的斐波那契数列。   
  据生物学知识我们知道,植物的生长规律是其环境因素决定,如阳光、水、季节等,其生长过程遵循斐波那契数列的规律,是客观事物相互作用的结果。除此之外,人类生理结构的发育也是符合斐波那契数列的规律。这些都是客观世界存在的规律,因此斐波那契数列是客观世界形成的一种本质规律   斐波那契数列在其它领域也有很多比如股市等等,有兴趣的朋友可以去查阅更多资料了解。说了这么多下面我们看看怎么用scratch来计算了。   再看一下这个数列   0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,,,1,2   第一个数是0,第二个数是1,从第三个数开始,每一项都等于前两项之和。   1、定义四个变量:要说明的是n-2表示第当前数前面的两个数,n-1表示前面的一个数(如第5个数是3,那么n-2就是它前面两个就是1,n-1就是前面一个数2)   2、n就是我们要回答的第多少个数,从下图中很容易理解(如第7个数,那么n就是7),要注意的是n是大于3的,因为这个数列前两个数就是0、1   3、我们初始化要把n-2设置为0,n-1设置为1,他最开始代表了我们这个数列的前两个数,因此我们后面用循环计算的时候就直接从第三个数开始算起,这也就是为什么循环次数是n-2   
共有0条评论
QQ学习群:(满)
QQ行业群:(满)
微信公众号:kidscode_cn,二维码&
上传:李想
&&247&&&&&&1
上传:呜呜呜
&&244&&&&&&0
上传:DUANG
&&234&&&&&&0
上传:DUANG
&&143&&&&&&0
上传:shengri
&&218&&&&&&0&&4599 阅读
Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:
& & 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.
斐波那契数列中的每一项被定义为前两项之和。要求找出该数列中值为不超过 4 百万的偶数的项之和。
这道题稍微有点难度。来看看我们的 Haskell 程序吧:
Prelude& sum $ takeWhile (&=4000000) $ filter even $ map fst $ iterate (\(a,b)-&(b,a+b)) (1,2)
这个程序只有一行,我们从这行最右边开始分析:
(1, 2) 这个元组表示斐波那契数列的头两项。
其左边的 lambda 表达式将元组 (a, b) 变为 (b, a+b) 。
iterate 函数使用其右边的两个参数,生成一个无限列表:[ (1,2), (2,3), (3,5), (5,8), (8,13), ...] 。不要担心无限列表会耗尽内存,Haskell 是惰性求值的,只会生成你所需要的项。
map fst 函数取出列表中元组的第一个元素,生成一个新的列表:[ 1, 2, 3, 5, 8, ... ] 。
filter even 函数过滤列表中的元素,只留下值为偶数的项:[ 2, 8, ... ] 。
takeWhile (&=4000000) 函数也用来过滤列表,停止于列表中最后一个不大于 4 百万的元素。所以在这里我们得到了一个有限的列表:[ 2,8,...,3524578 ],该列表共计 11 项。
sum 函数将列表中的所有元素求和。如果把这里的 sum 函数改为 last 函数,就变成取列表最后一项。如果把 sum $ 去掉,就得到整个列表了。
这里所有的 $ 都是函数,用在这里是为了减少代码中括号的数目,你可以理解为分隔符。
这非常酷吧!Haskell 比 C# 好玩多了。
千万不要写出以下程序:
main = print $ sum $ takeWhile (&=4000000) $ filter even $ map fib [1..]
fib n = fib (n-1) + fib (n-2)
这个程序的算法是正确的:
第 3 行到第 5 行的 fib 函数就是用来计算斐波那契数列的第 n 项的。这是经典的递归算法。
第 1 行最右边的 [1..] 生成一个无限列表:[ 1, 2, 3, 4, 5, ... ] 。
map fib 函数生成斐波那契数列:[ 1, 2, 3, 5, 8, ... ] 。
剩下的事情就和第一个程序一样了。
但是,这个程序在我的计算机上要运行 16.588 秒(使用 Unix 的
命令计时)。而第一个程序只需 0.003 秒。而且这差别还不是线性的,随着要计算的项数的增加,效率相差越来越大。直接使用递归计算斐波那契数列是算法教科书上著名的反例。
虽然我们的第一个程序已经非常快了,但还可以稍微改进一下:
Prelude& sum $ takeWhile (&=4000000) $ map fst $ iterate (\(a,b)-&(b,a+4*b)) (2,8)
这个 Haskell 程序和第一个程序的差别如下:
作为起始条件的元组 (1,2) 被修改为 (2,8) 了。
lambda 表达式中对元组的第二项乘了四倍。
不再过滤掉列表中值为奇数的项了。
这个程序的运行结果和前面两个程序是一样的。为什么呢?我们来观察斐波那契数列(不要跟我说这个数列和题目中的不一样,斐波那契数列的头两项是什么数学家们就没有取得一致过。不过这不影响我们的答案,因为 1 不是偶数。):
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...
可以看到,每三项就有一项是偶数。这样,我们就每三项取一个数就好了:
2, 8, 34, 144, ...
可以证明,这个新数列的每一项(从第三项起)是前一项的四倍再加上再前一项。这样,我们就得到了改进的程序。详细的论述请参见: 。
怎么样,数学也很酷吧?
Wir müssen wissen, wir werden wissen.
本书是一本在大学中广泛使用的经典数学教科书.书中讲解了许多计算机科学中用到的数学知识及技巧,教你如何把一个实际...温馨提示:糗事百科为大家收集了很多的斐波那契数列c语言求前二十项和的糗事,各种关于斐波那契数列c语言求前二十项和的爆笑经历,尴尬时刻和开心视频,想持续关注斐波那契数列c语言求前二十项和的糗事就收藏本页吧。
扫码下载糗事百科app

我要回帖

更多关于 斐波那契数列 的文章

 

随机推荐