javascript 用记忆函数快速计算递归函数


Posted in Javascript onMarch 15, 2010

如果有一个 fibonacci 数列要计算:

var fibonacci = function (n) { 
return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2); 
};

恐怕数字一大浏览器就会崩掉了,因为运算过程中函数会有大量重复的计算。但 JavaScript 强大的数组和函数闭包可以轻松实现对已计算的结果记忆。运算速度会有指数级的提高。

小而强大的记忆函数:

var memoizer = function (memo, fundamental) { 
var shell = function (n) { 
var result = memo[n]; 
if (typeof result !== 'number') { 
result = fundamental(shell, n); 
memo[n] = result; 
} 
return result; 
}; 
return shell; 
};

第一个参数为初始记忆数列,第二个参数为基础函数。用起来就更简单啦:
var fibonacci = memoizer([0, 1], function (shell, n) { 
return shell(n - 1) + shell(n - 2); 
});

类似的,如果要算 factorial 数列:
var factorial = memoizer([1, 1], function (shell, n) { 
return n * shell(n - 1); 
});
Javascript 相关文章推荐
javascript事件模型代码
Jul 01 Javascript
eclipse如何忽略js文件报错(附图)
Oct 30 Javascript
jQuery实现的产品自动360度旋转展示特效源码分享
Aug 21 Javascript
JavaScript中数组添加值和访问值常见问题
Feb 06 Javascript
JS未跨域操作iframe里的DOM
Jun 01 Javascript
输入框点击时边框变色效果的实现方法
Dec 26 Javascript
基于JavaScript实现多级菜单效果
Jul 25 Javascript
JavaScript获取tr td 的三种方式全面总结(推荐)
Aug 15 Javascript
微信小程序与后台PHP交互的方法实例分析
Dec 10 Javascript
jQuery.parseJSON()函数详解
Feb 28 jQuery
JS数组的常用10种方法详解
May 08 Javascript
手把手教你实现 Promise的使用方法
Sep 02 Javascript
JS 密码强度验证(兼容IE,火狐,谷歌)
Mar 15 #Javascript
javascript css styleFloat和cssFloat
Mar 15 #Javascript
javascript 嵌套的函数(作用域链)
Mar 15 #Javascript
JavaScript 嵌套函数指向this对象错误的解决方法
Mar 15 #Javascript
JQuery 常用操作代码
Mar 14 #Javascript
Jquery Ajax学习实例 向页面发出请求,返回XML格式数据
Mar 14 #Javascript
Jquery cookie操作代码
Mar 14 #Javascript
You might like
php分页示例代码
2007/03/19 PHP
PHP翻页跳转功能实现方法
2020/11/30 PHP
yii实现使用CUploadedFile上传文件的方法
2015/12/28 PHP
解析WordPress中的post_class与get_post_class函数
2016/01/04 PHP
PHP验证码类ValidateCode解析
2017/01/07 PHP
Laravel5框架自定义错误页面配置操作示例
2019/04/17 PHP
在TP5数据库中四个字段实现无限分类的示例
2019/10/18 PHP
DOM下的节点属性和操作小结
2009/05/14 Javascript
往光标所在位置插入值的js代码
2013/09/22 Javascript
jquery div拖动效果示例代码
2013/12/08 Javascript
javascript运行机制之this详细介绍
2014/02/07 Javascript
jQuery的remove()方法使用详解
2015/08/11 Javascript
原生js封装的一些jquery方法(详解)
2016/09/20 Javascript
微信小程序遇到修改数据后页面不渲染的问题解决
2017/03/09 Javascript
Jquery获取radio选中的值
2017/05/05 jQuery
使用JS动态显示文本
2017/09/09 Javascript
Vue 2.0入门基础知识之内部指令详解
2017/10/15 Javascript
详解Vuex管理登录状态
2017/11/13 Javascript
vue实现移动端悬浮窗效果
2018/12/01 Javascript
vue学习笔记五:在vue项目里面使用引入公共方法详解
2019/04/04 Javascript
js实现图片无缝循环轮播
2019/10/28 Javascript
解决vue项目F5刷新mounted里的函数不执行问题
2019/11/05 Javascript
[02:20]DOTA2中文配音宣传片
2013/05/22 DOTA
python安装以及IDE的配置教程
2015/04/29 Python
Python使用面向对象方式创建线程实现12306售票系统
2015/12/24 Python
python实现超简单的视频对象提取功能
2018/06/04 Python
python实现ID3决策树算法
2018/08/29 Python
pygame游戏之旅 添加游戏界面按键图形
2018/11/20 Python
Python面向对象实现一个对象调用另一个对象操作示例
2019/04/08 Python
pytorch 实现tensor与numpy数组转换
2019/12/27 Python
Python 改变数组类型为uint8的实现
2020/04/09 Python
Matplotlib.pyplot 三维绘图的实现示例
2020/07/28 Python
关于iframe跨域使用postMessage的实现
2019/10/29 HTML / CSS
Coltorti Boutique官网:来自意大利的设计师品牌买手店
2018/11/09 全球购物
企业安全生产规章制度
2015/08/06 职场文书
Python 统计序列中元素的出现频度
2022/04/26 Python