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 相关文章推荐
游戏人文件夹程序 ver 4.03
Jul 14 Javascript
JavaScript Event学习第五章 高级事件注册模型
Feb 07 Javascript
读jQuery之十二 删除事件核心方法
Jul 31 Javascript
jquery.fileEveryWhere.js 一个跨浏览器的file显示插件
Oct 24 Javascript
jquery创建一个新的节点对象(自定义结构/内容)的好方法
Jan 21 Javascript
javascript通过获取html标签属性class实现多选项卡的方法
Jul 27 Javascript
Node.js中使用socket创建私聊和公聊聊天室
Nov 19 Javascript
基于HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)
Jan 05 Javascript
JavaScript判断是否是微信浏览器
Jun 13 Javascript
VUE中使用Vue-resource完成交互
Jul 21 Javascript
jQuery:unbind方法的使用详解
Aug 14 jQuery
js实现自动播放匀速轮播图
Feb 06 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
phpMyAdmin 安装及问题总结
2009/05/28 PHP
PHP判断图片格式的七种方法小结
2013/06/03 PHP
Linux下PHP连接Oracle数据库
2014/08/20 PHP
js window.event对象详尽解析
2009/02/17 Javascript
jquery select下拉框操作的一些说明
2010/04/02 Javascript
JavaScript的模块化:封装(闭包),继承(原型) 介绍
2013/07/22 Javascript
js函数在frame中的相互调用详解
2014/03/03 Javascript
JavaScript对IE操作的经典代码(推荐)
2014/03/10 Javascript
javascript实现无缝上下滚动特效
2015/12/16 Javascript
Bootstrap表单布局样式源代码
2016/07/04 Javascript
Vue.js实战之Vuex的入门教程
2017/04/01 Javascript
创建简单的node服务器实例(分享)
2017/06/23 Javascript
vue 指定组件缓存实例详解
2018/04/01 Javascript
Mac下通过brew安装指定版本的nodejs教程
2018/05/17 NodeJs
vue.js+element-ui动态配置菜单的实例
2018/09/07 Javascript
详解mpvue小程序中怎么引入iconfont字体图标
2018/10/01 Javascript
[03:58]2014DOTA2国际邀请赛 龙宝赛后解密DK获胜之道
2014/07/14 DOTA
[43:26]完美世界DOTA2联赛PWL S2 Forest vs Rebirth 第二场 11.20
2020/11/23 DOTA
python实现在目录中查找指定文件的方法
2014/11/11 Python
使用Mixin设计模式进行Python编程的方法讲解
2016/06/21 Python
python 中split 和 strip的实例详解
2017/07/12 Python
在Python中分别打印列表中的每一个元素方法
2018/11/07 Python
基于python历史天气采集的分析
2019/02/14 Python
pandas DataFrame的修改方法(值、列、索引)
2019/08/02 Python
Docker部署Python爬虫项目的方法步骤
2020/01/19 Python
使用Python制作新型冠状病毒实时疫情图
2020/01/28 Python
使用gunicorn部署django项目的问题
2020/12/30 Python
CSS3中引入多种自定义字体font-face
2020/06/12 HTML / CSS
Aquatalia官网:意大利著名鞋履品牌
2019/09/26 全球购物
远程学习的教学用品和家庭学习资源:Really Good Stuff
2020/04/27 全球购物
教师学习培训邀请函
2014/02/04 职场文书
《列夫托尔斯泰》教学反思
2014/02/10 职场文书
高中军训感想300字
2014/03/04 职场文书
环保证明
2015/06/23 职场文书
捐款仪式主持词
2015/07/04 职场文书
Mongodb 迁移数据块的流程介绍分析
2022/04/18 MongoDB