#!/usr/bin/perl
# Usamos el módulo Benchmark para comparar nuestros resultados.
# Noten como al módulo Memoize le puedo pedir que en lugar de
# hacer un alias hacia la nueva función con caché, le cambie el
# nombre, asà puedo probar con facilidad.
use strict;
use warnings;
use Benchmark qw(cmpthese);
use Memoize;
memoize 'fib', INSTALL => 'memo_fib';
sub fib {
my ($n) = @_;
if ($n < 2) {
return 1;
}
else {
return fib($n - 1) + fib($n - 2);
}
}
# Los lados izquierdos son _etiquetas_, pero los lados derechos
# son _clausuras_ sin argumentos que llaman al código en cuestión.
cmpthese( 200000, {
'sin memo' => 'fib(12)',
'con memo' => 'memo_fib(12)'
} );