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 数组排序函数
Aug 20 Javascript
原生javascript获取元素样式属性值的方法
Dec 25 Javascript
JQuery文字列表向上滚动的代码
Nov 13 Javascript
js创建对象的区别示例介绍
Jul 24 Javascript
JS封装cookie操作函数实例(设置、读取、删除)
Nov 17 Javascript
Flask中获取小程序Request数据的两种方法
May 12 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
Sep 27 Javascript
基于react后端渲染模板引擎noox发布使用
Jan 11 Javascript
原生js实现获取form表单数据代码实例
Mar 27 Javascript
vue.js+elementUI实现点击左右箭头切换头像功能(类似轮播图效果)
Sep 05 Javascript
vue输入节流,避免实时请求接口的实例代码
Oct 30 Javascript
详细分析JavaScript中的深浅拷贝
Sep 17 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实现像JSP,ASP里Application那样的全局变量
2007/01/12 PHP
php使用正则表达式获取图片url的方法
2015/01/16 PHP
PHP简单获取网站百度搜索和搜狗搜索收录量的方法
2016/08/23 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
2017/08/07 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
Laravel框架用户登陆身份验证实现方法详解
2017/09/14 PHP
PHP抽象类和接口用法实例详解
2019/07/20 PHP
js玩一玩WSH吧
2007/02/23 Javascript
javascript 全角转换实现代码
2009/07/17 Javascript
JavaScript 面向对象编程(2) 定义类
2010/05/18 Javascript
jquery获取ASP.NET服务器端控件dropdownlist和radiobuttonlist生成客户端HTML标签后的value和text值
2010/06/28 Javascript
利用jQuary实现文字浮动提示效果示例代码
2013/12/26 Javascript
JavaScript获取当前页面上的指定对象示例代码
2014/02/28 Javascript
Bootstrap BootstrapDialog使用详解
2017/02/17 Javascript
分析JS中this引发的bug
2017/12/12 Javascript
JavaScript封装的常用工具类库bee.js用法详解【经典类库】
2018/09/03 Javascript
详解小程序如何避免多次点击,重复触发事件
2019/04/08 Javascript
jQuery删除/清空指定元素的所有子节点实例代码
2019/07/04 jQuery
微信小程序如何播放腾讯视频的实现
2019/09/20 Javascript
Linux下为不同版本python安装第三方库
2016/08/31 Python
基于Python 的进程管理工具supervisor使用指南
2016/09/18 Python
分析python切片原理和方法
2017/12/19 Python
Python查找两个有序列表中位数的方法【基于归并算法】
2018/04/20 Python
Python实现重建二叉树的三种方法详解
2018/06/23 Python
Python实现的简单线性回归算法实例分析
2018/12/26 Python
在Pytorch中计算自己模型的FLOPs方式
2019/12/30 Python
Python SSL证书验证问题解决方案
2020/01/13 Python
详解django中Template语言
2020/02/22 Python
Python使用Paramiko控制liunx第三方库
2020/05/20 Python
Python collections.deque双边队列原理详解
2020/10/05 Python
Sport-Thieme荷兰:购买体育用品
2019/08/25 全球购物
校园达人秀策划书
2014/01/12 职场文书
《走一步再走一步》教学反思
2014/02/15 职场文书
疾病防治方案
2014/05/31 职场文书
python的列表生成式,生成器和generator对象你了解吗
2022/03/16 Python
MySQL事务的ACID特性以及并发问题方案
2022/07/15 MySQL