费式数列 |
您所在的位置:网站首页 › 费氏数列艺术板原理 › 费式数列 |
费式数列
说明
Fibonacci为1200年代的欧洲数学家,在他的着作中曾经提到:「若有一隻免子每个月生一隻小免子,一个月后小免子也开始生产。起初只有一隻免 子,一个月后就有两隻免子,二个月后有三隻免子,三个月后有五隻免子(小免子投入生产)……」。 如果不太理解这个例子的话,举个图就知道了,注意新生的小免子需一个月成长期才会投入生产,类似的道理也可以用于植物的生长,这就是Fibonacci数 列,一般习惯称之为费氏数列,例如以下: 1、1 、2、3、5、8、13、21、34、55、89…… 解法依说明,我们可以将费氏数列定义为以下: fn = fn-1 + fn-2 if n > 1 fn = n if n = 0, 1 演算法费氏阵列的解法很多,基本上可以使用递迴解,演算法最简单,如下: 1 2 3 4 5 6 7 8 9 Procedure FIB(N) [ IF (N < 0) PRINT ("输入错误"); IF (N = 0 OR N = 1) RETURN (N); ELSE RETURN ( FIB(N-1) + FIB(N-2) ); ]简单,但是不实用,因为太慢了,在求每一个费氏数时,都会发生严重的重覆计算,也就是递迴该行 ( FIB(N-1) + FIB(N-2) ),最差的big-o可以到2的n/2次方,画张递迴的树状图就可以知道重覆计算的数有多少了。 可以採取非递迴的版本,可以将big(o)减至n,演算法如下: 1 2 3 4 5 6 7 8 9 10 Procedure FIB(N) a = 1; b = 1; FOR i = 2 TO N [ temp = b; b = a + b; a = temp; ] RETURN b; ]若想要一次列出所有N之前的费氏数,则可以将for迴圈的部份改以阵列,也就是: 1 2 3 4 5 F(0) = 0; F(1) = 1; FOR i |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |