• Publicidad

Recursividad en Perl

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Recursividad en Perl

Notapor andydavid » 2006-04-24 11:43 @530

:shock: Hola queridos hermanos Programadores. Como he publicado en otras ocasiones estoy trabajando en un proyecto grande con perl y la libreria tk para una aplicación multiplataforma, pero ayer cuando necesitaba crear un explorador de proyecto en forma de árbol similar al de Dreamweaver para sus sitios, surgió la necesidad de utilizar la recursividad para construir el árbol partiendo de un directorio raíz (ejemplo: "C:", "USR") pero el lenguaje no me respondió. Por ello fuí a lo mas elemental e intenté con un simple ejercicio recursivo como el fibonacci y que creen, tampoco funcionó. Bueno, escribo para ver si alguno de ustedes ha tenido suerte en este tema o saben de algún módulo que me permita implementar esta propiedad en perl. :shock:
ESTUDIO CARACAS1348
Avatar de Usuario
andydavid
Perlero nuevo
Perlero nuevo
 
Mensajes: 20
Registrado: 2005-05-27 08:47 @408
Ubicación: RB_VENEZUELA

Publicidad

Notapor kidd » 2006-04-24 11:54 @538

¿Qué Perl no acepta la recursividad? :shock:

Me parece que tienes un error de implementación, pues Perl claro que permite la recursividad.

Ahora, según entiendo para lo que necesitas la solución perfecta es File::Find y de ello hay un tutorial hay aquí en el sitio:
http://perlenespanol.com/archives-tut/000135.html


Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor explorer » 2006-04-24 12:14 @551

Ejemplo de fibonacci:
Código: Seleccionar todo
sub fib {
    my $x = shift;
    return $x if $x < 2;
    fib($x-1) + fib($x-2);
}
print fib(25); # 121393
Naturalmente, a medida que aumentamos los valores, el cálculo se hace cada vez más largo, en parte porque estamos constantemente calculando los mismos valores de fib(x). ¿Por qué tengo que calcular diez veces el valor de fib(5) si se que siempre vale 8?. Debería memorizar ese cálculo después de la primera vez...

Una solución muy sencilla, y esto es una gran ventaja de Perl, es el módulo Memoize (incluído de base). Agregamos un par de líneas y el programa ahora corre mucho más rápido:
Código: Seleccionar todo
use Memoize;
memoize 'fib';
sub fib {
    my $x = shift;
    return 1 if $x < 2;
    fib($x-1) + fib($x-2);
}
print fib(25); # 121393
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Avanzado

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 6 invitados

cron