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 相关文章推荐
HTML node相关的一些资料整理
Jan 01 Javascript
JavaScript原生对象之String对象的属性和方法详解
Mar 13 Javascript
jquery判断当前浏览器的实现代码
Nov 07 Javascript
JS获取文件大小方法小结
Dec 08 Javascript
js改变css样式的三种方法推荐
Jun 28 Javascript
AngularJS入门教程之Helloworld示例
Dec 25 Javascript
BootStrap 表单控件之单选按钮水平排列
May 23 Javascript
详解vue指令与$nextTick 操作DOM的不同之处
Aug 02 Javascript
JS实现的简单分页功能示例
Aug 23 Javascript
Angular+ionic实现折叠展开效果的示例代码
Jul 29 Javascript
Ant-design-vue Table组件customRow属性的使用说明
Oct 28 Javascript
微信小程序实现自定义动画弹框/提示框的方法实例
Nov 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
destoon网站转移服务器后搜索汉字出现乱码的解决方法
2014/06/21 PHP
CodeIgniter配置之routes.php用法实例分析
2016/01/19 PHP
PHP+Ajax异步带进度条上传文件实例
2016/11/01 PHP
thinkPHP5.0框架API优化后的友好性分析
2017/03/17 PHP
ThinkPHP3.1.x修改成功与失败跳转页面的方法
2017/09/29 PHP
又一个小巧的图片预加载类
2007/05/05 Javascript
javascript 一个自定义长度的文本自动换行的函数
2007/08/19 Javascript
js判断输入是否为数字的具体实例
2013/08/03 Javascript
浅谈Javascript 执行顺序
2013/12/18 Javascript
JavaScript定时显示广告代码分享
2015/03/02 Javascript
jQuery基础知识点总结(必看)
2016/05/31 Javascript
jQuery联动日历的实例解析
2016/12/02 Javascript
javascript实现去除HTML标签的方法
2016/12/26 Javascript
JQuery查找子元素find()和遍历集合each的方法总结
2017/03/07 Javascript
react router 4.0以上的路由应用详解
2017/09/21 Javascript
Node错误处理笔记之挖坑系列教程
2018/06/05 Javascript
新手必须知的Node.js 4个JavaScript基本概念
2018/09/16 Javascript
Vue分页器实现原理详解
2019/06/28 Javascript
Vue的属性、方法、生命周期实例代码详解
2019/09/17 Javascript
详解JavaScript中的链式调用
2020/11/27 Javascript
wxpython 学习笔记 第一天
2009/02/09 Python
Python标准库inspect的具体使用方法
2017/12/06 Python
python装饰器-限制函数调用次数的方法(10s调用一次)
2018/04/21 Python
Python实现的质因式分解算法示例
2018/05/03 Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
2019/05/23 Python
python3模拟实现xshell远程执行liunx命令的方法
2019/07/12 Python
Python 实现的 Google 批量翻译功能
2019/08/26 Python
Jupyter notebook 远程配置及SSL加密教程
2020/04/14 Python
Python Serial串口基本操作(收发数据)
2020/11/06 Python
意大利火车票和铁路通行证专家:ItaliaRail
2019/01/22 全球购物
总经理司机职责
2014/02/02 职场文书
工程专业求职自荐书范文
2014/02/18 职场文书
生物科学专业毕业生求职信
2014/06/02 职场文书
保护环境标语
2014/06/09 职场文书
领导干部群众路线对照检查材料
2014/11/05 职场文书
JS创建或填充任意长度数组的小技巧汇总
2021/10/24 Javascript