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小贴士/ASP Tips javascript tips可以当桌面
Dec 10 Javascript
JS方法调用括号的问题探讨
Jan 24 Javascript
javascript数组遍历for与for in区别详解
Dec 04 Javascript
JavaScript中使用Math.floor()方法对数字取整
Jun 15 Javascript
ES6中Proxy与Reflect实现重载(overload)的方法
Mar 30 Javascript
vue.js+Echarts开发图表放大缩小功能实例
Jun 09 Javascript
jackson解析json字符串,首字母大写会自动转为小写的方法
Dec 22 Javascript
vue移动端轻量级的轮播组件实现代码
Jul 12 Javascript
jQuery 同时获取多个标签的指定内容并储存为数组
Nov 20 jQuery
js实现纯前端压缩图片
Nov 16 Javascript
详解vue中使用transition和animation的实例代码
Dec 12 Vue.js
vue 组件基础知识总结
Jan 26 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
谈一谈收音机的高放电路
2021/03/02 无线电
PHP 如何利用phpexcel导入数据库
2013/08/24 PHP
PHP7多线程搭建教程
2017/04/21 PHP
Track Image Loading效果代码分析
2007/08/13 Javascript
Jquery 弹出层插件实现代码
2009/10/24 Javascript
用Javascript评估用户输入密码的强度(Knockout版)
2011/11/30 Javascript
表格单元格交错着色实现思路及代码
2013/04/01 Javascript
jquery+css+ul模拟列表菜单具体实现思路
2013/04/15 Javascript
解决IE6的PNG透明JS插件使用介绍
2013/04/17 Javascript
node.js中的querystring.escape方法使用说明
2014/12/10 Javascript
jquery限定文本框只能输入数字(整数和小数)
2016/01/08 Javascript
JS中常用的正则表达式
2016/09/29 Javascript
详解nodejs实现本地上传图片并预览功能(express4.0+)
2017/06/28 NodeJs
微信小程序实现上拉加载功能
2019/11/20 Javascript
[44:37]完美世界DOTA2联赛PWL S3 Forest vs access 第一场 12.11
2020/12/13 DOTA
python脚本实现查找webshell的方法
2014/07/31 Python
numpy.transpose对三维数组的转置方法
2018/04/17 Python
Python读写及备份oracle数据库操作示例
2018/05/17 Python
flask框架视图函数用法示例
2018/07/19 Python
pycharm new project变成灰色的解决方法
2019/06/27 Python
Python 等分切分数据及规则命名的实例代码
2019/08/16 Python
Python通过类的组合模拟街道红绿灯
2020/09/16 Python
Python爬虫之App爬虫视频下载的实现
2020/12/08 Python
HTML5 Canvas阴影使用方法实例演示
2013/08/02 HTML / CSS
波兰家具和室内装饰品购物网站:Vivre
2018/04/10 全球购物
莫斯科隐形眼镜网上商店:Linzi
2019/07/22 全球购物
德国前卫设计师时装在线商店:Luxury Loft
2019/11/04 全球购物
北京麒麟网信息技术有限公司网络游戏测试面试题
2013/09/28 面试题
高中生毕业学习总结的自我评价
2013/11/14 职场文书
消防安全责任书范本
2014/04/15 职场文书
住房抵押登记委托书
2014/09/27 职场文书
个人批评与自我批评
2014/10/15 职场文书
英语专业毕业论文答辩开场白
2015/05/27 职场文书
未来,这5大方向都很适合创业
2019/07/22 职场文书
用基于python的appium爬取b站直播消费记录
2021/04/17 Python
django学习之ajax post传参的2种格式实例
2021/05/14 Python