关于《高性能JavaScript》制表(Memoization)笔记

减少工作量是最好的性能优化技术。代码所做的事情越少,他的速度就越快。

书中在关于用制表优化递归的下一段代码中,存在问题。

function memfactorial(n){
    if (!memfactorial.cache){
        memfactorial.cache = {
            "0": 1,
            "1": 1
        };
    }

    if (!memfactorial.cache.hasOwnProperty(n)){
        memfactorial.cache[n] = n * memfactorial (n-1);
    }
    return memfactorial.cache[n];
}

下划线部分这种写法并没有真正解决递归的问题。当首次n过大时,本质上依然是一个递归。
只适用于从小到大的逐步调用。

例如:

// 堆栈溢出

alert(memfactorial(4375));

// 正常

alert(memfactorial(3750) + memfactorial(4375));

posted @ 2011-04-02 11:47  testudy  阅读(302)  评论(0编辑  收藏  举报