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在vs2008及js文件中的无智能提示的解决方法
Dec 30 Javascript
JS 获取滚动条高度示例代码
Oct 24 Javascript
js中confirm实现执行操作前弹出确认框的方法
Nov 01 Javascript
基于jQuery 实现bootstrapValidator下的全局验证
Dec 07 Javascript
深入浅析JavaScript的API设计原则
Jun 14 Javascript
js获取元素下的第一级子元素的方法(推荐)
Mar 05 Javascript
AngularJS路由切换实现方法分析
Mar 17 Javascript
基于easyui checkbox 的一些操作处理方法
Jul 10 Javascript
for循环 + setTimeout 结合一些示例(前端面试题)
Aug 30 Javascript
js实现1,2,3,5数字按照概率生成
Sep 12 Javascript
Bootstrap 模态框多次显示后台提交多次BUG的解决方法
Dec 26 Javascript
Vue.extend 登录注册模态框的实现
Dec 29 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
通过ODBC连接的SQL SERVER实例
2006/10/09 PHP
PHP中Session可能会引起并发问题
2015/06/26 PHP
PHP strip_tags() 去字符串中的 HTML、XML 以及 PHP 标签的函数
2016/05/22 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
2017/08/11 PHP
IE与firefox之jquery用法区别
2008/10/03 Javascript
基于jQuery的简单的列表导航菜单
2011/03/02 Javascript
禁止iframe脚本弹出的窗口覆盖了父窗口的方法
2014/09/06 Javascript
jQuery中after()方法用法实例
2014/12/25 Javascript
js获取元素外链样式的方法
2015/01/27 Javascript
JavaScript 表单处理实现代码
2015/04/13 Javascript
js时钟翻牌效果实现代码分享
2020/07/31 Javascript
jQuery实现可展开合拢的手风琴面板菜单
2015/09/15 Javascript
xmlplus组件设计系列之分隔框(DividedBox)(8)
2017/05/02 Javascript
浅析JS中常用类型转换及运算符表达式
2017/07/23 Javascript
javacript replace 正则取字符串中的值并替换【推荐】
2018/09/13 Javascript
python3.3教程之模拟百度登陆代码分享
2014/01/16 Python
Python读取mp3中ID3信息的方法
2015/03/05 Python
Python脚本实现代码行数统计代码分享
2015/03/10 Python
对python字典元素的添加与修改方法详解
2018/07/06 Python
python开启debug模式的方法
2019/06/27 Python
python中with语句结合上下文管理器操作详解
2019/12/19 Python
Python面向对象封装操作案例详解
2019/12/31 Python
python matplotlib.pyplot.plot()参数用法
2020/04/14 Python
pyinstaller将含有多个py文件的python程序做成exe
2020/04/29 Python
浅谈Keras参数 input_shape、input_dim和input_length用法
2020/06/29 Python
护理自我鉴定范文
2013/10/06 职场文书
财务出纳岗位职责
2014/02/03 职场文书
医学专业职业生涯规划范文
2014/02/05 职场文书
2014年党员承诺书范文
2014/05/20 职场文书
2014年保管员工作总结
2014/11/18 职场文书
2014年学校财务工作总结
2014/12/06 职场文书
2014年敬老院工作总结
2014/12/08 职场文书
企业2014年度工作总结
2014/12/10 职场文书
建议书的格式及范文
2015/09/14 职场文书
关于感恩老师的古诗句
2019/08/20 职场文书
pandas进行数据输入和输出的方法详解
2022/03/23 Python