1)低级版本

var fibonacci = function(n) {
if (n == 0 || n == 1) {
  return n;
} else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
}

  基本上算到fibonacci(50), 就不行了, 老半天。

2) 进阶版一

var fibonacci = function(n) {
var cache = {};
return function(n) {
if (!cache[n])
cache[n] = n < ? n : fibonacci(n - ) + fibonacci(n - );
return cache[n];
}
}();

  利用闭包,缓存已计算好的值, fibonacci(200)不超过4ms

3) 进阶版二

var fibonacci = function(n) {
if (n == 0 || n == 1) {
return n;
} else {
var cache = arguments[1] || {};
if (!cache[n]) {
cache[n] = fibonacci(n - 1, cache) + fibonacci(n - 2, cache);
}
return cache[n];
}
}

  传递缓存的数据, fibonacci(200) 不超过4ms

4) 终极版

var fibonacci = (function() {
var cache = {};
return function(n) {
if (n == 0 || n == 1)
return n;
if (cache[n - 2] === undefined)
cache[n - 2] = fibonacci(n - 2);
if (cache[n - 1] === undefined)
cache[n - 1] = fibonacci(n - 1); return cache[n - 1] + cache[n - 2];
}
})();

  递归缓存的数据,fibonacci(200) 不超过4ms

Fibonacci(斐波那契数列)的最佳实践方式(JavaScript)的更多相关文章

  1. 递归算法之Fibonacci 斐波那契数列第n个数的求解

    Fibonacci 斐波那契数列第n个数的求解,也可以用递归和非递归的形式实现,具体如下,dart语言实现. int fibonacci(int n) { if (n <= 0) throw S ...

  2. lintcode:Fibonacci 斐波纳契数列

    题目: 斐波纳契数列 查找斐波纳契数列中第 N 个数. 所谓的斐波纳契数列是指: 前2个数是 0 和 1 . 第 i 个数是第 i-1 个数和第i-2 个数的和. 斐波纳契数列的前10个数字是: 0, ...

  3. 算法导论-求(Fibonacci)斐波那契数列算法对比

    目录 1.斐波那契数列(Fibonacci)介绍 2.朴素递归算法(Naive recursive algorithm) 3.朴素递归平方算法(Naive recursive squaring) 4 ...

  4. 实现斐波拉契数列的四种方式python代码

    斐波那契数列 1. 斐波拉契数列简介 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引 ...

  5. JS实现斐波那契数列的五种方式

    下面是五种实现斐波那契数列的方法 循环   function fibonacci(n){ var res1 = 1; var res2 = 1; var sum = res2; for(var i = ...

  6. fibonacci 斐波那契数列

    1.小兔子繁殖问题  (有该问题的详细来由介绍) 2.台阶问题 题目:一个人上台阶可以一次上一个或者两个,问这个人上n层的台阶,一共有多少种走法. 递归的思路设计模型: i(台阶阶数)         ...

  7. 斐波那契数列(Fibonacci) iOS

    斐波那契数列Fibonacci 斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2 ...

  8. 如何使用Python输出一个[斐波那契数列]

    如何使用Python输出一个[斐波那契数列]Fibonacci 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonac ...

  9. 关于斐波拉契数列(Fibonacci)

    斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10 ...

随机推荐

  1. Thinking in BigData 系列

    Thinking in BigData(九)大数据hadoop集群下离线数据存储和挖掘架构 Thinking in BigData(八)大数据Hadoop核心架构HDFS+MapReduce+Hbas ...

  2. Python—操作redis

    Python操作redis 连接方式:点击 1.String 操作 redis中的String在在内存中按照一个name对应一个value来存储 set() #在Redis中设置值,默认不存在则创建, ...

  3. struts2 的正则表达式验证不起作用解决办法

    在官网上提供的model为: <field-validator type="regex"> <param name="expression"& ...

  4. GDB的深入研究

    GDB的深入研究 一.GDB代码调试 (一)GDB调试实例 在终端中编译一个示例C语言小程序,保存为文件 gdblianxi.c 中,用GCC编译. 在上面的命令行中,使用-o参数指定了编译生成的可执 ...

  5. eclipse左侧不见

    我的解决办法: eclipse--->  Window --->Perspective--> Open Perspective-->Java

  6. spring定时器配置

    在此记录两种定时任务的配置: 一种是quart定时器: <1>配置xml文件(定时任务配置) <!--定时任务 --> <bean id="txfwBomc&q ...

  7. The Same Game-POJ1027模拟

    The Same Game Time Limit: 1000MS Memory Limit: 10000K Description The game named "Same" is ...

  8. 【Linux】类Unix 操作系统进程监控控制工具 Supervisor

    Supervisor 是一个客户端服务器系统,允许用户监控和控制类 Unix 操作系统上的进程数. 官网 http://supervisord.org 安装1. easy_install superv ...

  9. FruitFrolic

    这是一个连连看小游戏,以 Unity2D 开发.因用了数种水果图片来做头像,所以游戏取名 FruitFrolic.同样,它也只是我闲时的练手. 少时曾玩过掌上游戏机里的俄罗斯方块及打飞机,及手机上的推 ...

  10. C# 关于委托和事件的妙文:通过一个例子详细介绍委托和事件的作用;Observer模式简介

    委托和事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见 ...