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 相关文章推荐
JQuery文本框高亮显示插件代码
Apr 02 Javascript
JavaScript 类型的包装对象(Typed Wrappers)
Oct 27 Javascript
JS代码放在head和body中的区别分析
Dec 01 Javascript
一个js控制的导航菜单实例代码
Dec 03 Javascript
无阻塞加载js,防止因js加载不了影响页面显示的问题
Dec 18 Javascript
JavaScript字符串对象
Jan 14 Javascript
jquery一键控制checkbox全选、反选或全不选
Oct 16 jQuery
使用axios实现上传图片进度条功能
Dec 21 Javascript
使用JSON格式提交数据到服务端的实例代码
Apr 01 Javascript
vue中axios实现数据交互与跨域问题
May 12 Javascript
electron-vue开发环境内存泄漏问题汇总
Oct 10 Javascript
关于在LayUI中使用AJAX提交巨坑记录
Oct 25 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 printf输出格式使用说明
2010/12/05 PHP
php二维码生成以及下载实现
2017/09/28 PHP
jquery为页面增加快捷键示例
2014/01/31 Javascript
javascript写的一个模拟阅读小说的程序
2014/04/04 Javascript
在JavaScript中使用timer示例
2014/05/08 Javascript
jQuery中last()方法用法实例
2015/01/06 Javascript
javascript实现自动输出文本(打字特效)
2015/08/27 Javascript
Knockout自定义绑定创建方法
2015/12/26 Javascript
详解Bootstrap glyphicons字体图标
2016/01/04 Javascript
深入理解JavaScript中Ajax
2016/08/02 Javascript
AngularJS入门教程引导程序
2016/08/18 Javascript
JS表格组件BootstrapTable行内编辑解决方案x-editable
2016/09/01 Javascript
JavaScript获取URL中参数querystring的方法详解
2016/10/11 Javascript
Bootstrap table的使用方法
2016/11/02 Javascript
javascript history对象详解
2017/02/09 Javascript
详解angular中的作用域及继承
2017/05/31 Javascript
zTree获取当前节点的下一级子节点数实例
2017/09/05 Javascript
Angular4编程之表单响应功能示例
2017/12/13 Javascript
详解Nuxt.js Vue服务端渲染摸索
2018/02/08 Javascript
JavaScript设计模式之观察者模式(发布订阅模式)原理与实现方法示例
2018/07/27 Javascript
jQuery实现的简单拖拽功能示例【测试可用】
2018/08/14 jQuery
Vue项目history模式下微信分享爬坑总结
2019/03/29 Javascript
python目录操作之python遍历文件夹后将结果存储为xml
2014/01/27 Python
python版本的仿windows计划任务工具
2018/04/30 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
2019/02/12 Python
python+os根据文件名自动生成文本
2019/03/21 Python
python3.6.8 + pycharm + PyQt5 环境搭建的图文教程
2020/06/11 Python
CSS3实现粒子旋转伸缩加载动画
2016/04/22 HTML / CSS
HTML5如何实现元素拖拽
2016/03/11 HTML / CSS
canvas绘制树形结构可视图形的实现
2020/04/03 HTML / CSS
《桂林山水》教学反思
2014/02/08 职场文书
运动会标语
2014/06/21 职场文书
推广活动策划方案
2014/08/23 职场文书
授权委托书范本(单位)
2014/09/28 职场文书
学生会2016感恩节活动小结
2016/04/01 职场文书
python中pandas.read_csv()函数的深入讲解
2021/03/29 Python