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 相关文章推荐
this和执行上下文实现代码
Jul 01 Javascript
基于JQuery 的消息提示框效果代码
Jul 31 Javascript
js中判断Object、Array、Function等引用类型对象是否相等
Aug 29 Javascript
JS实现图片预加载无需等待
Dec 21 Javascript
jquery prop的使用介绍及与attr的区别
Dec 19 Javascript
jquery特效 点击展示与隐藏全文
Dec 09 Javascript
js排序与重组的实例讲解
Aug 28 Javascript
p5.js 毕达哥拉斯树的实现代码
Mar 23 Javascript
Node+OCR实现图像文字识别功能
Nov 26 Javascript
手把手带你封装一个vue component第三方库
Feb 14 Javascript
详解vuejs2.0 select 动态绑定下拉框支持多选
Apr 25 Javascript
js实现点击图片在屏幕中间弹出放大效果
Sep 11 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与javascript对多项选择的处理
2006/10/09 PHP
用php来检测proxy
2006/10/09 PHP
一步一步学习PHP(4) php 函数 补充2
2010/02/15 PHP
PHP FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)
2011/07/23 PHP
PHP curl 抓取AJAX异步内容示例
2014/09/09 PHP
PHP中使用curl入门教程
2015/07/02 PHP
windows server 2008/2012安装php iis7 mysql环境搭建教程
2016/06/30 PHP
php结合redis高并发下发帖、发微博的实现方法
2016/12/15 PHP
利用PHP计算有多少小于当前数字的数字方法示例
2020/08/26 PHP
javascript 弹出的窗口返回值给父窗口具体实现
2013/11/23 Javascript
jQuery事件之键盘事件(ctrl+Enter回车键提交表单等)
2014/05/11 Javascript
JavaScript代码性能优化总结篇
2016/05/15 Javascript
jquery对所有input type=text的控件赋值实现方法
2016/12/02 Javascript
PHP实现记录代码运行时间封装类实例教程
2017/05/08 Javascript
JavaScript数据类型的存储方法详解
2017/08/25 Javascript
three.js实现3D模型展示的示例代码
2017/12/31 Javascript
Vue项目history模式下微信分享爬坑总结
2019/03/29 Javascript
layui添加动态菜单与选项卡
2019/07/26 Javascript
JavaScript JSON数据处理全集(小结)
2019/08/15 Javascript
python发送邮件接收邮件示例分享
2014/01/21 Python
简单介绍Python中的JSON模块
2015/04/08 Python
python嵌套函数使用外部函数变量的方法(Python2和Python3)
2016/01/31 Python
python如何读写csv数据
2018/03/21 Python
从列表或字典创建Pandas的DataFrame对象的方法
2019/07/06 Python
django最快程序开发流程详解
2019/07/19 Python
python jenkins 打包构建代码的示例代码
2019/11/29 Python
以设计师精品品质提供快速时尚:PopJulia
2018/01/09 全球购物
使用Vue.js和MJML创建响应式电子邮件
2021/03/23 Vue.js
2014年元旦活动方案
2014/02/15 职场文书
活动总结范文
2014/08/30 职场文书
教师师德考核自我评价
2014/09/13 职场文书
人事任命通知
2015/04/20 职场文书
初中历史教学反思
2016/02/19 职场文书
2019暑假学生安全口号
2019/06/27 职场文书
演讲开头怎么书写?
2019/08/06 职场文书
使用Python的开发框架Brownie部署以太坊智能合约
2021/05/28 Python