记忆功能比非记忆功能花费更多时间
Memoization Function taking more time than non memoized one
我正在尝试在 javascript 中实现记忆技术。但是我的记忆函数比非记忆函数花费更多的时间。我想我已经正确地实现了记忆功能(我是编程新手)。
谁能帮忙告诉我原因。
记忆函数代码:
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)
}
不会在每次调用后回收您的缓存。你并没有真正使用它:
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
or 运算符 ( || ) 首先尝试获取缓存值,如果它不存在,则递归生成它。
我正在尝试在 javascript 中实现记忆技术。但是我的记忆函数比非记忆函数花费更多的时间。我想我已经正确地实现了记忆功能(我是编程新手)。 谁能帮忙告诉我原因。
记忆函数代码:
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)
}
不会在每次调用后回收您的缓存。你并没有真正使用它:
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
or 运算符 ( || ) 首先尝试获取缓存值,如果它不存在,则递归生成它。