`
alexcheng
  • 浏览: 182499 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Fibonacci(斐波纳契)数列的计算

阅读更多

斐波纳契数列的计算是一个很老的话题了,出现在各种算法书中。今天写这篇博文的出发点是在网上看了MIT 6.00的公开课,正好把一些思路理清一些,毕竟有些东西,自己实践过后才有深刻的认识。

普通的递归计算

这是最简单的算法了,根据斐波纳契数列的定义就可以得出来:fib(n) = fib(n - 1) + fib(n - 2),具体的代码如下。(需要说明的是代码中都省略了对参数的检查,在实际的代码中是需要的)。

 

function fib(n) {
    return (n === 0 || n === 1) ? 1 : fib(n - 1) + fib(n - 2);
}

 

使用查找表的递归计算

普通的递归计算会执行很多重复计算,通过查找表就可以获取到之前已经计算过的fib(k)的值,从而避免重复计算。代码如下:

 

function fib_m(n) {
    var f = arguments.callee, m = f._m || (f._m = {0:1, 1:1});
    return m[n] || (m[n] = f(n-1) + f(n-2));
}
 

在这里,把查找表作为JavaScript方法对象的一个属性。

迭代计算

更加简单的做法是使用迭代来计算,代码如下:

 

function fib_i(n) {
    if (n === 0 || n === 1) { return 1; }
    var a = 1, b = 1, c;
    for (var i = 2; i <= n; i++) {
        c = a + b;
        b = a;
        a = c;
    }
    return c;
}

 这里用了3个变量,a和b分别表示f(n-1)和f(n-2),c表示f(n)。

0
0
分享到:
评论

相关推荐

    斐波纳契数列求和算法

    对于斐波纳契数列,我们可以使用一个数组或列表来存储已经计算出的斐波纳契数,然后依次计算后面的数,直到达到目标项。 ```csharp int[] fibSeries = new int[n + 1]; fibSeries[0] = 0; fibSeries[1] = 1; ...

    实现斐波纳契数列求和

    实现斐波纳契数列求和的程序通常是为了计算特定数列项的和或者展示递归或动态规划的概念。以下是一些常见的实现方法: 1. **递归法**: 递归是最直观的方法,但效率较低,因为存在大量的重复计算。例如: ```...

    斐波纳契数列

    5. **计算优化**:为了优化计算斐波纳契数列,可以使用矩阵快速幂或者迭代方法。矩阵快速幂利用了矩阵乘法的性质,可以在对数时间内计算出斐波纳契数列的任意项。迭代方法则是通过循环计算,逐步得到每一项的值,...

    用php迭代器来实现一个斐波纳契数列函数类.zip

    斐波纳契数列通常做法是用递归实现,当然还有其它的方法。这里现学现卖,用PHP的迭代器来实现一个斐波纳契数列,几乎没有什么难度,只是把类里的next()方法重写了一次。注释已经写到代码中,也是相当好理解的。

    斐波纳契数列编程解决方法

    斐波纳契数列是一个经典的数学概念,在计算机科学中经常被用作算法示例和问题求解的基础。这个数列的定义是这样的:第一项F0为0,第二项F1为1,从第三项开始,每一项都等于前两项之和。即Fn = Fn-1 + Fn-2 (n &gt;= 3)...

    一个标注斐波那契数列的指标--K线数量 主图指标通达信指标.doc

    在金融市场分析领域,斐波那契数列的应用一直是一个备受关注的话题。它不仅仅是一个简单的数字游戏,更是一种深刻反映市场内在规律的工具。在技术分析中,将斐波那契数列与主图指标结合,开发出一种新的分析方法,...

    java斐波纳契数列

    The Fibonacci numbers Fn are defined as follows: F0 is 1, F1 is 1, and Fi+2 = Fi + Fi+1 , where i = 0, 1, 2, . . . . In other words, each number is the sum of the previous two numbers. The first few ...

    矩阵乘法求斐波纳契数列

    矩阵快速幂的模板 ,采用矩阵转移的方法求斐波纳契数列的第n项。

    斐波那契数列的求解

    斐波那契数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n&gt;=2,n∈N*)在现代物理、准晶体结构、...

    斐波那契数列java的简单实现

    斐波那契数列java的简单实现,很简单明了

    Python3 编程示例:斐波纳契数列

    斐波纳契数列是一种经典的数学序列,每个数是前两个数的和。在Python3中,我们可以使用各种方法来实现这个序列。本篇将详细解释如何使用Python编写斐波纳契数列,并探讨其中涉及的编程概念。 首先,我们要理解...

    打印菱形以及斐波纳契数列的几种解法介绍

    本文将详细讲解如何使用编程语言实现打印菱形和计算斐波纳契数列的不同方法。 首先,我们来看如何打印菱形。菱形是由星号(*)组成的一种图形,形状类似于一个倒置的等腰三角形。这里提供了一种使用C语言实现的方案。...

    PHP迭代器实现斐波纳契数列的函数

    在实际使用中,可以通过创建`Fibonacci`类的实例并使用`foreach`循环来迭代斐波纳契数列,例如: ```php $seq = new Fibonacci; $i = 0; foreach ($seq as $f) { echo "$f "; if ($i++ === 15) break; // 打印15...

    数列

    数列

    Python——Fibonacci数列生成

    斐波那契数列(Fibonacci sequence),又称黄金分割数列,由于是被数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。 数学上,斐波那契数列以递归的形式进行定义: ...

    feibonaqie.rar_Crystalline Lasers_准晶体_化学 matlab

    在"斐波那契"这个文件中,可能包含了使用MATLAB进行的斐波纳契数列与准晶体激光或化学反应模拟的相关代码和数据分析。这些文件可能包括MATLAB脚本、数据文件、图形输出以及相关的研究报告,它们为深入理解斐波纳契...

    fuziwang#review#递归和循环--斐波那契数列1

    在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n&gt;=3,n∈N*)// 方法一:int F

    Fibonacci-Factorials-Calculator:一个小应用程序,它递归地计算斐波那契数列中的阶乘和值

    它按斐波纳契数列计算数字并递归分解,并在一个小巧,干净且美观的用户界面上显示它们。 该应用程序可以按以下方式运行: javac interfaceUtilsateur.java # compile java interfaceUtilsateur # run --- 法语 ...

    使用python求斐波那契数列中第n个数的值示例代码

    又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以...

    斐波纳契时钟

    该斐波那契时钟就是依照这种方式来计算时间的,现在就来详细讲解一下它的计算方式:钟面上有5个正方形色块,长度分别为斐波那契数列里的前五个数1、1、2、3、5,代表着时间的数值;红色代表小时;绿色代表分钟;而...

Global site tag (gtag.js) - Google Analytics