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 相关文章推荐
Mootools 1.2教程(21)——类(二)
Sep 15 Javascript
jquery 输入框数字限制插件
Nov 10 Javascript
javascript学习笔记(十八) 获得页面中的元素代码
Jun 20 Javascript
JavaScript实现页面实时显示当前时间的简单实例
Jul 20 Javascript
bootstrap data与jquery .data
Jul 07 Javascript
Jquery实现兼容各大浏览器的Enter回车切换输入焦点的方法
Sep 01 Javascript
JQuery实现的按钮倒计时效果
Dec 23 Javascript
jQuery实现HTML表格单元格的合并功能
Apr 06 Javascript
AngularJS动态绑定ng-options的ng-model实例代码
Jun 21 Javascript
动态加载权限管理模块中的Vue组件
Jan 16 Javascript
vue中改变选中当前项的显示隐藏或者状态的实现方法
Feb 08 Javascript
react 兄弟组件如何调用对方的方法示例
Oct 23 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
phpwind中的数据库操作类
2007/01/02 PHP
php生成RSS订阅的方法
2015/02/13 PHP
WordPress中调试缩略图的相关PHP函数使用解析
2016/01/07 PHP
PHP中使用OpenSSL生成证书及加密解密
2017/02/05 PHP
Laravel如何同时连接多个数据库详解
2019/08/13 PHP
PHP的JSON封装、转变及输出操作示例
2019/09/27 PHP
关于laravel 日志写入失败问题汇总
2019/10/17 PHP
javascript indexOf函数使用说明
2008/07/03 Javascript
用AJAX返回HTML片段中的JavaScript脚本
2010/01/04 Javascript
JSON 教程 json入门学习笔记
2020/09/22 Javascript
jQuery入门介绍之基础知识
2015/01/13 Javascript
javascript自定义in_array()函数实现方法
2015/08/03 Javascript
Vue.js每天必学之构造器与生命周期
2016/09/05 Javascript
微信小程序 vidao实现视频播放和弹幕的功能
2016/11/02 Javascript
Vue.js组件tree实现省市多级联动
2016/12/02 Javascript
Angular ng-repeat遍历渲染完页面后执行其他操作详细介绍
2016/12/13 Javascript
vue系列之动态路由详解【原创】
2017/09/10 Javascript
react router 4.0以上的路由应用详解
2017/09/21 Javascript
详解使用React.memo()来优化函数组件的性能
2019/03/19 Javascript
[01:00:53]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Secret
2018/03/30 DOTA
python实现爬虫下载漫画示例
2014/02/16 Python
详解Numpy中的广播原则/机制
2018/09/20 Python
python适合人工智能的理由和优势
2019/06/28 Python
在python中用print()输出多个格式化参数的方法
2019/07/16 Python
python 将dicom图片转换成jpg图片的实例
2020/01/13 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
2020/11/10 Python
Python图像读写方法对比
2020/11/16 Python
使用 css3 transform 属性来变换背景图的方法
2019/05/07 HTML / CSS
CSS3中颜色线性渐变实战
2015/07/18 HTML / CSS
Coltorti Boutique官网:来自意大利的设计师品牌买手店
2018/11/09 全球购物
英国排名第一的停车场运营商:NCP
2019/08/26 全球购物
平面网站制作专科生的自我评价分享
2013/12/11 职场文书
市场部岗位职责范本
2015/04/15 职场文书
2015年幼儿园班务工作总结
2015/05/12 职场文书
webpack的移动端适配方案小结
2021/07/25 Javascript
Java实现添加条码或二维码到Word文档
2022/06/01 Java/Android