2017-06-23 5 views
0

Ich versuche, Memoization-Technik in Javascript zu implementieren. Aber meine Memo-Funktion benötigt mehr Zeit als die Nicht-Memo-Funktion. Ich denke, dass ich memoized Funktion richtig umgesetzt habe (ich bin ein Neuling zum Programmieren). Kann jemand helfen und lassen Sie mich den Grund wissen.Memoization Function nimmt mehr Zeit als nicht Memoized

memoized Funktionscode:

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) 
} 

Nicht memoized Funktion:

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

Der Cache sollte in Ihrer Funktion nicht initialisiert werden, sonst ist er immer leer –

Antwort

0

Kein Cache recycelt werden nach jedem Gespräch. Und ich bin es nicht verwenden wirklich:

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

Der oder Operator (||) versucht zunächst einen zwischengespeicherten Wert zu nehmen, wenn es nicht existiert es es rekursiv erzeugt.

Verwandte Themen