javascript 用记忆函数快速计算递归函数
作者:bea
如果有一个 fibonacci 数列要计算: 代码如下: var fibonacci = function (n) { return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2); }; 恐怕数字一大浏览器就会崩掉了,因为运算过程中函数会有大量重复的计算。但 JavaScript 强大的数组和函数闭包可以轻松实现对已计算的结果记忆。运算速度会有指数级的提高。 小而强大的记忆函数: 代码如下: var
如果有一个 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);
});
有用 | 无用
代码如下:
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 Ajax学习实例5 向WebService发出请求,返回泛型集合数据的异步调用
- javascript中的undefined 与 null 的区别 补充篇
- javascript+iframe 实现无刷新载入整页的代码
- js select常用操作控制代码
- js实现的日期操作类DateTime函数代码
- js 翻转颜色实现代码
- javascript json2 使用方法
- jQuery 选择器理解
- jQuery 学习入门篇附实例代码
- Jquery Ajax学习实例4 向WebService发出请求,返回实体对象的异步调用
- Jquery Ajax学习实例3 向WebService发出请求,调用方法返回数据
- javascript 二维数组的实现与应用
- JavaScript 中文转拼音实现代码 有些bug
- Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据
- jQuery MD5加密实现代码
- javascript将ip地址第四段用星号代替的两种方法
- javascript和jquery分别实现的九九乘法表代码
- [原创]js获取数组任意个不重复的随机数组元素