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 相关文章推荐
客户端 使用XML DOM加载json数据的方法
Sep 28 Javascript
使用mouse事件实现简单的鼠标经过特效
Jan 30 Javascript
js实现拖拽效果(构造函数)
Dec 14 Javascript
动态的9*9乘法表效果的实现代码
May 16 Javascript
JS设置时间无效问题的解决办法
Feb 18 Javascript
微信小程序实现tab和swiper切换结合效果
Jul 17 Javascript
vue项目实现记住密码到cookie功能示例(附源码)
Jan 31 Javascript
浅析vue.js数组的变异方法
Jun 30 Javascript
关于layui的动态图标不显示的解决方法
Sep 04 Javascript
原生Vue 实现右键菜单组件功能
Dec 16 Javascript
基于javascript实现放大镜特效
Dec 03 Javascript
vue动态设置路由权限的主要思路
Jan 13 Vue.js
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
Destoon模板制作简明教程
2014/06/20 PHP
如何让CI框架支持service层
2014/10/29 PHP
Laravel框架路由设置与使用示例
2018/06/12 PHP
PHP递归算法的简单实例
2019/02/28 PHP
window.open的功能全解析
2006/10/10 Javascript
jquery 表单进行客户端验证demo
2009/08/24 Javascript
Underscore.js 的模板功能介绍与应用
2012/12/24 Javascript
前端轻量级MVC框架CanJS详解
2014/09/26 Javascript
jQuery监控文本框事件并作相应处理的方法
2015/04/16 Javascript
jQuery插件zepto.js简单实现tab切换
2015/06/16 Javascript
详解AngularJS中的表达式使用
2015/06/16 Javascript
jQuery可见性过滤器:hidden和:visibility用法实例
2015/06/24 Javascript
javascript实现不同颜色Tab标签切换效果
2016/04/27 Javascript
javascript学习笔记_浅谈基础语法,类型,变量
2016/09/19 Javascript
jQuery插件zTree实现单独选中根节点中第一个节点示例
2017/03/08 Javascript
解决Vue中mounted钩子函数获取节点高度出错问题
2018/05/18 Javascript
解决百度Echarts图表坐标轴越界的方法
2018/10/17 Javascript
详解小程序用户登录状态检查与更新实例
2019/05/15 Javascript
vue组件实现移动端九宫格转盘抽奖
2020/10/16 Javascript
[49:11]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第二场 12.20
2020/12/23 DOTA
Python学习笔记(二)基础语法
2014/06/06 Python
python中的闭包用法实例详解
2015/05/05 Python
Python信息抽取之乱码解决办法
2017/06/29 Python
python dlib人脸识别代码实例
2019/04/04 Python
Python中使用logging和traceback模块记录日志和跟踪异常
2019/04/09 Python
使用Keras加载含有自定义层或函数的模型操作
2020/06/10 Python
python利用 keyboard 库记录键盘事件
2020/10/16 Python
美国滑雪板和装备购物网站:Skis.com
2018/12/20 全球购物
西班牙香水和化妆品连锁店:Druni
2019/05/05 全球购物
YSL圣罗兰美妆英国官网:Yves Saint Laurent Beauty UK
2019/08/03 全球购物
房屋租赁协议书(标准版)
2014/10/02 职场文书
抄袭同学作业检讨书1000字
2014/11/20 职场文书
2015年教研工作总结
2015/05/23 职场文书
Mysql数据库手动及定时备份步骤
2021/11/07 MySQL
MySQL中一条update语句是如何执行的
2022/03/16 MySQL
Pytorch中expand()的使用(扩展某个维度)
2022/07/15 Python