23.02.2017 Views

Java

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

JAvA 215<br />

n! =<br />

{<br />

1<br />

(n – 1) ! x n<br />

if n = 0,<br />

if n > 0.<br />

n<br />

n! = k<br />

k =1<br />

Figura 10. En esta imagen podemos ver dos definiciones que<br />

corresponden a la función factorial.<br />

public class Entero {<br />

…<br />

@Memoize<br />

public Entero factorial() {<br />

if(this.esCero()) {<br />

return uno();<br />

}<br />

return this.multiplicadorPor(this.anterior().factorial());<br />

}<br />

…<br />

}<br />

Hasta aquí hemos podido observar que ya hemos anotado el método<br />

factorial para ser memorizado. De esta forma, cuando queramos el<br />

factorial de 4 (4!), la primera vez se calcularán los factoriales de 1, de<br />

2, de 3 y de 4 y quedarán memorizados. La próxima vez que pida el<br />

factorial de alguno de ellos, este será obtenido sin recalcular nada y sin<br />

invocar el factorial que corresponde a los otros números.<br />

sobre memoization y caching<br />

Recordar resultados pasados para no tener que realizar el trabajo de obtenerlos nuevamente es una técnica<br />

ampliamente utilizada. Desde los servidores web, que memorizan páginas completas, hasta los números<br />

factoriales, como en nuestro ejemplo. Hay que mencionar que no es fácil implementar correctamente estos<br />

mecanismos, ya que debemos manejar cuánta memoria estamos usando y su liberación.<br />

www.FreeLibros.me<br />

www.redusers.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!