Recursividad en Perl

La recursividad es un mecanismo cuando una función se llama a sí misma una y otra vez hasta que se cumple la condición requerida. Cuando la declaración de llamada de función se escribe dentro de la misma función, dicha función se denomina función recursiva.
El argumento pasado a una función se recupera de la array predeterminada @_ mientras que se puede acceder a cada valor mediante $_[0], $_[1], etc.
Ejemplo 1: El siguiente ejemplo encuentra el factorial de un número. 
 

Factorial of any number n is (n)*(n-1)*(n-2)*....*1.
e.g.:
4! = 4*3*2*1 = 24
3! = 3*2*1 = 6
2! = 2*1 = 2
1! = 1
0! = 0

Perl

#!/usr/bin/perl
 
# Perl Program to calculate Factorial
sub fact
{
     
# Retrieving the first argument
# passed with function calling
my $x = $_[0];
 
# checking if that value is 0 or 1
if ($x == 0 || $x == 1)
{
    return 1;
}
 
# Recursively calling function with the next value
# which is one less than current one
else
{
    return $x * fact($x - 1);
}
}
 
# Driver Code
$a = 5;
 
# Function call and printing result after return
print "Factorial of a number $a is ", fact($a);

Así es como funciona el programa:  
Paso 1: cuando el valor del escalar a es 0 o 1, la función devolverá 1 porque el valor de ambos es 0. ¡y 1! es 1. 
Paso 2: cuando el valor del escalar a es 2, fac(x-1) hace una llamada a fac(1) y esta función devuelve 1. 
Entonces, es 2*factorial(1) = 2*1 = 2. Entonces, devolverá 2. 
Paso 3: de manera similar, cuando se pasan valores más altos a la función en cada argumento de llamada, el valor disminuye en 1 y se calcula hasta que el valor llega a 1.
Ejemplo 2: El siguiente ejemplo calcula la serie de Fibonacci hasta un número dado. 
 

Perl

#!/usr/bin/perl
 
# Perl Program to print Fibonacci series
sub fib
{
    # Retrieving values from the parameter
    my $x = shift;
    my $y = shift;
     
    # Number till which the series is to be printed
    my $n = shift;
     
    # Check for the end value
    if ($y > $n)
    {
        return 1;
    }
     
    # Printing the number
    print " $y";
 
    # Recursive Function Call
    fib($y, $x + $y, $n);    
}
 
# Driver Code
 
# Number till which series is to be printed
$a = 5;
 
# First two elements of the series
$c = 0;
$d = 1;
 
print "$c";
 
# Function call with required parameters
fib($c, $d, $a);

Así es como funciona el programa:  
Paso 1- Se llama a la función fib() con 3 valores iniciales de parámetros que serán 0 y 1 mientras que $n es un número hasta el cual se imprimirá una serie 
Paso 2- Estos valores se transfieren en el forma de una array cuyos valores se recuperan con el uso de shift. 
Paso 3: en cada llamada, se recuperan los dos primeros valores mediante shift y estos valores se almacenan en escalares x e y. Ahora estos dos valores se suman para obtener el siguiente valor de la serie. Este paso continúa hasta que el valor alcanza el valor final proporcionado por el usuario
 

Publicación traducida automáticamente

Artículo escrito por rupanisweety y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *