var yourself = { fibonacci : function(n) { return n === 0 ? 0 : n === 1 ? 1 : this.fibonacci(n -1) + this.fibonacci (n-2) } };Esta función establece constantemente el valor de su propiedad 'fibonacci' en función del argumento proporcionado para el parámetro 'n' de la función. Me gustaría refactorizar la función para reducir el tiempo de ejecución.
Usando programación dinámica, Memoización que almacena en caché el resultado ya calculado
lea más sobre memorización aquí
const memoFib = function () { let memo = {} return function fib(n) { if (n in memo) { return memo[n] } else { if (n <= 1) { memo[n] = n } else { memo[n] = fib(n - 1) + fib(n - 2) } return memo[n] } } } const fib = memoFib() console.log(fib(50));Podría implementar algún tipo de almacenamiento en caché. De esta manera, no necesita volver a calcular el mismo resultado varias veces.
var yourself = { fibonacci : function(n, cache = new Map()) { if(cache.has(n)) return cache.get(n); if(n === 0) return 0; if(n === 1) return 1; const start = this.fibonacci(n-1, cache); const end = this.fibonacci(n-2, cache); cache.set(n-1, start); cache.set(n-2, end); return start + end; } }; console.log(yourself.fibonacci(40));