Comparando las dos versiones, parece que la que usa memorización es más lenta cuando debería ser más rápida en teoría. ¿Por qué es este el caso?
Sin memorización:
function fibonacci(n) { if (n <= 1) { return 1; } return fibonacci(n - 1) + fibonacci(n - 2); } const start = Date.now(); fibonacci(22); const duration = Date.now() - start; console.log(duration);11Con Memoización:
function fibonacci(n, dic = {}) { if (n <= 1) { return 1; } if (dic[n]) { return dic[n]; } let res = fibonacci(n - 1) + fibonacci(n - 2); dic[n] = res return res } const start = Date.now(); fibonacci(22); console.log(Date.now() - start);19En su versión memorizada, se olvida de pasar dic a la pila de llamadas recursivas. Entonces obtiene el valor predeterminado cada vez.
Cuando lo pasa, el tiempo cae a cero en mi máquina (Esa forma de medir el rendimiento no es particularmente precisa, ¡claramente no es cero!)
function fibonacci(n, dic = {}) { if (n <= 1) { return 1; } if (dic[n]) { return dic[n]; } let res = fibonacci(n - 1,dic) + fibonacci(n - 2,dic); dic[n] = res return res } const start = Date.now(); fibonacci(22); console.log(Date.now() - start);