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 相关文章推荐
JavaScript中URL编码函数代码
Jan 11 Javascript
基于Jquery插件开发之图片放大镜效果(仿淘宝)
Nov 19 Javascript
JavaScript判断密码强度(自写代码)
Sep 06 Javascript
JS对HTML标签select的获取、添加、删除操作
Oct 17 Javascript
JSON取值前判断
Dec 23 Javascript
PHPExcel中的一些常用方法汇总
Jan 23 Javascript
JavaScript自定义数组排序方法
Feb 12 Javascript
JavaScript变量的作用域全解析
Aug 14 Javascript
jquery获取select选中值的方法分析
Dec 22 Javascript
javascript实现日期三级联动下拉框选择菜单
Dec 03 Javascript
jqGrid表格底部汇总、合计行footerrow处理
Aug 21 Javascript
JavaScript实现五子棋小游戏
Oct 26 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生成静态页面分析 模板+缓存+写文件
2009/08/17 PHP
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
2014/06/27 PHP
ThinkPHP3.2.3数据库设置新特性
2015/03/05 PHP
PHP格式化MYSQL返回float类型的方法
2016/03/30 PHP
js中匿名函数的N种写法
2010/09/08 Javascript
javascript 进阶篇3 Ajax 、JSON、 Prototype介绍
2012/03/14 Javascript
jQuery 在光标定位的地方插入文字的插件
2012/05/10 Javascript
js判断客户端是iOS还是Android等移动终端的方法
2013/12/11 Javascript
简述Jquery与DOM对象
2015/07/10 Javascript
AngularJS入门教程之表格实例详解
2016/07/27 Javascript
AngularJS入门教程之多视图切换用法示例
2016/11/02 Javascript
jQuery Ztree行政地区树状展示(点击加载)
2016/11/09 Javascript
jQuery实现用户输入自动完成功能
2017/02/13 Javascript
老生常谈JavaScript面向对象基础与this指向问题
2017/10/16 Javascript
详解如何使用koa实现socket.io官网的例子
2018/11/04 Javascript
vue+php实现的微博留言功能示例
2019/03/16 Javascript
详解关于表格合并span-method方法的补充(表格数据由后台动态返回)
2019/05/21 Javascript
把MySQL表结构映射为Python中的对象的教程
2015/04/07 Python
用python实现对比两张图片的不同
2018/02/05 Python
强悍的Python读取大文件的解决方案
2019/02/16 Python
图文详解python安装Scrapy框架步骤
2019/05/20 Python
python关于调用函数外的变量实例
2019/12/26 Python
keras 特征图可视化实例(中间层)
2020/01/24 Python
TensorFlow 读取CSV数据的实例
2020/02/05 Python
Python 发送邮件方法总结
2020/08/10 Python
python Matplotlib基础--如何添加文本和标注
2021/01/26 Python
Mixbook加拿大:照片书,照片卡,剪贴簿,年历和日历
2017/02/21 全球购物
杭州时比特电子有限公司SQL
2013/08/22 面试题
大课间体育活动方案
2014/03/12 职场文书
水毁工程实施方案
2014/04/01 职场文书
安全生产管理责任书
2014/04/16 职场文书
无财产无子女离婚协议书范文
2014/09/14 职场文书
2019大学生预备党员转正思想汇报
2019/06/21 职场文书
Feign调用传输文件异常的解决
2021/06/24 Java/Android
如何优化vue打包文件过大
2022/04/13 Vue.js
超越Nginx的Web服务器caddy优雅用法
2022/06/21 Servers