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 相关文章推荐
Prototype使用指南之string.js
Jan 10 Javascript
js实现上传图片之上传前预览图片
Mar 25 Javascript
javascript ready和load事件的区别示例介绍
Aug 30 Javascript
javaScript 计算两个日期的天数相差(示例代码)
Dec 27 Javascript
JS实现距离上次刷新已过多少秒示例
May 23 Javascript
JQuery学习总结【一】
Dec 01 Javascript
javascript中BOM基础知识总结
Feb 14 Javascript
vue-cli的webpack模板项目配置文件分析
Apr 01 Javascript
Ionic2调用本地SQlite实例
Apr 22 Javascript
3种vue组件的书写形式
Nov 29 Javascript
layui表单提交到后台自动封装到实体类的方法
Sep 12 Javascript
在Vue中使用mockjs代码实例
Nov 25 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
暴雪前总裁遗憾:没尽早追赶Dota 取消星际争霸幽灵
2020/03/08 星际争霸
用PHP连接Oracle数据库
2006/10/09 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
2018/02/19 PHP
调试Node.JS的辅助工具(NodeWatcher)
2012/01/04 Javascript
javascript中如何处理引号编码&amp;#034;
2013/08/15 Javascript
Jquery实现自定义弹窗示例
2014/03/12 Javascript
JavaScript函数详解
2014/11/17 Javascript
JavaScript中的数组特性介绍
2014/12/30 Javascript
javascript检测两个数组是否相似
2015/05/19 Javascript
jQuery复制表单元素附源码分享效果演示
2015/09/30 Javascript
基于javascript实现漂亮的页面过渡动画效果附源码下载
2015/10/26 Javascript
基于Bootstrap实现tab标签切换效果
2020/04/15 Javascript
vue使用drag与drop实现拖拽的示例代码
2017/09/07 Javascript
jquery获取transform里的值实现方法
2017/12/12 jQuery
layui实现数据表格自定义数据项
2019/10/26 Javascript
js实现百度登录窗口拖拽效果
2020/03/19 Javascript
[02:39]DOTA2国际邀请赛助威团西雅图第一天
2013/08/08 DOTA
[02:51]DOTA2战队出征照拍摄花絮 TI3明星化身时尚男模
2013/07/22 DOTA
[35:29]Secret vs VG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
wxPython 入门教程
2008/10/07 Python
python解析基于xml格式的日志文件
2017/02/25 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
2018/05/30 Python
Python3随机漫步生成数据并绘制
2018/08/27 Python
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
2018/11/10 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
2019/04/12 Python
flask开启多线程的具体方法
2020/08/02 Python
linux面试相关问题
2013/04/28 面试题
介绍一下javax.servlet.Servlet接口及其主要方法
2015/11/30 面试题
成功的餐厅经营创业计划书
2014/01/15 职场文书
餐厅经理岗位职责范本
2014/02/17 职场文书
结婚幸福感言
2015/08/01 职场文书
门卫管理制度范本
2015/08/05 职场文书
情况说明书格式及范文
2019/06/24 职场文书
python 通过使用Yolact训练数据集
2021/04/06 Python
python周期任务调度工具Schedule使用详解
2021/11/23 Python