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中clipboardData对象用法详解
May 13 Javascript
jQuery复制表单元素附源码分享效果演示
Sep 30 Javascript
使用JQuery实现的分页插件分享
Nov 05 Javascript
基于Javascript实现返回顶部按钮
Feb 29 Javascript
loading动画特效小结
Jan 22 Javascript
jQuery基本筛选选择器实例代码
Feb 06 Javascript
vue打包的时候自动将px转成rem的操作方法
Jun 20 Javascript
JS解析后台返回的JSON格式数据实例
Aug 06 Javascript
浅谈Vue.js路由管理器 Vue Router
Aug 16 Javascript
Vue中的v-for指令不起效果的解决方法
Sep 27 Javascript
mpvue开发音频类小程序踩坑和建议详解
Mar 12 Javascript
纯js+css实现仿移动端淘宝网站的弹出详情框功能
Dec 29 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版本实现代码
2012/09/15 PHP
浅析ThinkPHP中execute和query方法的区别
2014/06/13 PHP
ThinkPHP安装和设置
2015/07/27 PHP
微信公众平台开发教程②微信端分享功能图文详解
2019/04/10 PHP
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
2019/10/10 PHP
JS中彻底删除JSON对象组成的数组中的元素
2020/09/22 PHP
仿163填写邮件地址自动显示下拉(无优化)
2008/11/05 Javascript
javascript椭圆旋转相册实现代码
2012/01/16 Javascript
jquery验证手机号码、邮箱格式是否正确示例代码
2013/07/28 Javascript
Jquery each方法跳出循环,并获取返回值(实例讲解)
2013/12/12 Javascript
jQuery插件Tooltipster实现漂亮的工具提示
2015/04/12 Javascript
JavaScript数组的一些奇葩行为
2016/01/25 Javascript
JavaScript中实现无缝滚动、分享到侧边栏实例代码
2016/04/06 Javascript
总结js中的一些兼容性易错的问题
2017/12/18 Javascript
vue .js绑定checkbox并获取、改变选中状态的实例
2018/08/24 Javascript
基于vue和react的spa进行按需加载的实现方法
2018/09/29 Javascript
微信小程序实现的绘制table表格功能示例
2019/04/26 Javascript
微信小程序 确认框的实现(附代码)
2019/07/23 Javascript
vue中使用element ui的弹窗与echarts之间的问题详解
2019/10/25 Javascript
Vue基础配置讲解
2019/11/29 Javascript
JavaScript实现随机点名程序
2020/03/25 Javascript
Python中绑定与未绑定的类方法用法分析
2016/04/29 Python
Python3 venv搭建轻量级虚拟环境的步骤(图文)
2019/08/09 Python
python实现截取屏幕保存文件,删除N天前截图的例子
2019/08/27 Python
详解python中的模块及包导入
2019/08/30 Python
Python SSL证书验证问题解决方案
2020/01/13 Python
简单了解如何封装自己的Python包
2020/07/08 Python
python gui开发——制作抖音无水印视频下载工具(附源码)
2021/02/07 Python
锐步美国官方网站:Reebok美国
2018/01/10 全球购物
单位单身证明样本
2014/10/11 职场文书
2014年电厂个人工作总结
2014/11/27 职场文书
房产公证书格式
2015/01/26 职场文书
个人求职信格式范文
2015/03/20 职场文书
干部培训简讯
2015/07/20 职场文书
python用字节处理文件实例讲解
2021/04/13 Python
python操作xlsx格式文件并读取
2021/06/02 Python