运用存储加速递归 Speed up recursive functions with memoization
大家对斐波那契(Fibonacci)数列都很熟悉。我们可以再20秒内写出下面这样一个方法。
1 | var fibonacci = function(n){ |
它可以运行,但并不高效。它做了太多重复的运算,我们可以通过存储这些运算结果来使其加速。
1 | var fibonacci = (function() { |
我们也可以定义一个高阶函数,它接收一个方法作为参数,返回一个该方法运用存储后的新方法。
1 | var memoize = function(func){ |
ES6版本的memoize函数如下:
1 | var memoize = function(func){ |
我们可以将memoize()
用在很多其他地方
- GCD(最大公约数)
1 | var gcd = memoize(function(a,b){ |
- 阶乘运算
1 | var factorial = memoize(function(n) { |
原文作者: anhr
原文链接: http://yoursite.com/2019/11/04/javascript/2016-01-29-speed-up-recursive-functions-with-memoization/
版权声明: 转载请注明出处(必须保留原文作者署名原文链接)