记忆功能比非记忆功能花费更多时间

时间:2017-06-23 08:29:09

标签: javascript memoization

我正在尝试在javascript中实现memoization技术。但是我的memoized函数比非memoized函数花费的时间更多。我想我已经正确实现了memoized功能(我是编程的新手)。 任何人都可以帮忙,让我知道原因。

记忆功能代码:

function fiboeven(n){
    var cache =[]
    if (n in cache)  return cache[n]
    else if (n === 1) return cache[0] = 2
    else if (n === 2) return cache[1] = 8
    else return cache[n] = 4*fiboeven(n-1) + fiboeven(n-2)
} 

非记忆功能:

function fiboeven(n){
    if (n === 1)
        return 2
    else if (n === 2)
        return 8
    else
        return 4*fiboeven(n-1) + fiboeven(n-2)
}

1 个答案:

答案 0 :(得分:0)

每次通话后都不会回收您的缓存。而你并没有真正使用它:

var cache=[0,2,8];
function fiboeven(n){
        if (cache[n])  return cache[n];
        return cache[n] = 4*(cache[n-1] || fiboeven(n-1)) + (cache[n-2] || fiboeven(n-2));
}

http://jsbin.com/fatoxivola/edit?console

或运算符(||)首先尝试获取缓存值,如果它不存在则以递归方式生成。