前端技巧--记忆

记忆是主要用于加速程序计算的一种优化技术,使得函数避免重复计算之前被处理的输入,而返回已缓存的结果

以斐波那契数列和阶乘为例

定义一个函数,参数为一个数组memo和一个回调函数formule

    var memoizer = function (memo, formule) {
        var recur = function (n) {
            var result = memo[n]
            if (typeof result !== 'number') {
                result = formule(recur, n)
                memo[n] = result
            }
            return result
        }
        return recur
    }

调用斐波那契数列函数

    var fibonacci = memoizer([0, 1], function (recur, n) {
        return recur(n - 1) + recur(n - 2)
    })
        console.log(fibonacci(6));

调用阶乘函数

    var factorial = memoizer([1, 1], function (recur, n) {
        return n * recur(n - 1)
    })
        console.log(factorial(6));

这样只需要提供一个基本的公式即可产生对应的函数

上一篇:剑指 Offer 13. 机器人的运动范围


下一篇:剑指 Offer 28. 对称的二叉树