高阶函数缓存应用之斐波那契数列

合理的利用js缓存,能有效提升复杂运算效率,此处有两种概念:
1.闭包-(指有权访问另一个函数作用域中的变量的函数)
2.高阶函数-(接受其他函数作为参数或返回其他函数的函数)
此处以斐波那契数列为例,演示了运用缓存与不运用缓存计算的效率差别。

斐波那契数列是一组数字,以1 或 0 开头,后面跟着1,然后根据每个数字等于前两个数字之和规则进行。如

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …]

根据此规律,编写一个函数返回斐波那契数列中的 n 元素,可解:

function fibonacci(n) {
    if (n <= 1) &#123;
        return 1;
    &#125;
    return fibonacci(n - 1) + fibonacci(n - 2);
&#125;;

运用高阶函数缓存改写此方法,可封装函数:

var memoizer = function (fun) &#123;
    var cache = &#123;&#125;;
    return function (n) &#123;
        if (cache[n] != undefined) &#123;
            return cache[n];
        &#125; else &#123;
            var result = fun(n);
            cache[n] = result;
            return result;
        &#125;
    &#125;
&#125;;
var fibonacciUseCache = memoizer(fibonacciMemorizer);
var fibonacciMemorizer = function (n) &#123;
    if (n <= 1) &#123;
        return 1;
    &#125;
    return fibonacciUseCache(n - 1) + fibonacciUseCache(n - 2);
&#125;

下面是写给自己看的,此处用jquery拓展封装下,备用:

(function () &#123;
    $.extend(&#123;
        memoizer: function (fun) &#123;
            var cache = &#123;&#125;;
            return function (n) &#123;
                if (cache[n] != undefined) &#123;
                    return cache[n];
                &#125; else &#123;
                    var result = fun(n);
                    cache[n] = result;
                    return result;
                &#125;
            &#125;
        &#125;
    &#125;);
&#125;)();

参考文档:

示例:请点这里


 上一篇
天气插件改造之Free初探 天气插件改造之Free初探
此处不宜多说(露出一个高深莫测的微笑!),精华自取: (function (window, document, scriptName, wigetname, url, jsonurl, scriptNode, originalNode) &
2019-04-11
下一篇 
清除cookie稳妥做法 清除cookie稳妥做法
清除cookie稳妥做法就是设置cookie与清除cookie写法一致,cookie清除不了的问题,主要出现在设置与清除cookie并非一端操作的情况下,此时需要注意path、domain的设置必须保持一致,注意下文中注释//warning
2019-03-27
  目录