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 相关文章推荐
ASP.NET jQuery 实例5 (显示CheckBoxList成员选中的内容)
Jan 13 Javascript
基于jQuery的获取标签名的代码
Jul 16 Javascript
页面定时刷新(1秒刷新一次)
Nov 22 Javascript
JavaScript使用指针操作实现约瑟夫问题实例
Apr 07 Javascript
详解AngularJS中自定义指令的使用
Jun 17 Javascript
JS简单实现多级Select联动菜单效果代码
Sep 06 Javascript
bootstrap使用validate实现简单校验功能
Dec 02 Javascript
jquery点赞功能实现代码 点个赞吧!
May 29 jQuery
angularjs项目的页面跳转如何实现(5种方法)
May 25 Javascript
浅谈Angular6的服务和依赖注入
Jun 27 Javascript
vue+iview/elementUi实现城市多选
Mar 28 Javascript
微信小程序实现3D轮播图效果(非swiper组件)
Sep 21 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判断用户是否关注微信公众号
2016/07/22 PHP
PHP中遍历数组的三种常用方法实例分析
2019/06/24 PHP
自己开发Dojo的建议框架
2008/09/24 Javascript
让div层随鼠标移动的实现代码 ie ff
2009/12/18 Javascript
Javascript学习笔记2 函数
2010/01/11 Javascript
js树插件zTree获取所有选中节点数据的方法
2015/01/28 Javascript
JQuery实现展开关闭层的方法
2015/02/17 Javascript
移动端jQuery修正Web页面滑动时div问题的两则实例
2016/05/30 Javascript
jQuery实现鼠标经过购物车出现下拉框代码(推荐)
2016/07/21 Javascript
jQuery的ajax和遍历数组json实例代码
2016/08/01 Javascript
JavaScript中对象的不同创建方法
2016/08/12 Javascript
jQuery Validate 相关参数及常用的自定义验证规则
2017/03/06 Javascript
jQuery操作之效果详解
2017/05/19 jQuery
使用veloticy-ui生成文字动画效果
2018/02/08 Javascript
video.js 一个页面同时播放多个视频的实例代码
2018/11/27 Javascript
jQuery实现的卷帘门滑入滑出效果【案例】
2019/02/18 jQuery
javascript实现简单留言板案例
2021/02/09 Javascript
[46:59]完美世界DOTA2联赛PWL S2 GXR vs Ink 第二场 11.19
2020/11/20 DOTA
python使用正则表达式检测密码强度源码分享
2014/06/11 Python
跟老齐学Python之编写类之四再论继承
2014/10/11 Python
python数据类型_字符串常用操作(详解)
2017/05/30 Python
numpy中实现二维数组按照某列、某行排序的方法
2018/04/04 Python
python自动化生成IOS的图标
2018/11/13 Python
tensorflow转换ckpt为savermodel模型的实现
2020/05/25 Python
西班牙香水和化妆品购物网站:Arenal Perfumerías
2019/03/01 全球购物
Shop Apotheke瑞士:您的健康与美容网上商店
2019/10/09 全球购物
俄罗斯香水在线商店:AromaCode
2019/12/04 全球购物
《小石潭记》教学反思
2014/02/13 职场文书
初中英语演讲稿
2014/04/29 职场文书
支部鉴定材料
2014/06/02 职场文书
同意迁入证明模板
2014/10/26 职场文书
升职感谢信
2015/01/22 职场文书
集团财务总监岗位职责
2015/04/03 职场文书
postgresql使用filter进行多维度聚合的解决方法
2021/07/16 PostgreSQL
SSM项目使用拦截器实现登录验证功能
2022/01/22 Java/Android
Python帮你解决手机qq微信内存占用太多问题
2022/02/15 Python