Tips: cómo resolver el cálculo de un factorial usando recursividad (PHP7)


Por lo general no es muy común que en PHP, y trabajando con sistemas comerciales, tengamos que implementar soluciones recursivas. Pero como tampoco es imposible, les paso un ejemplo. Tengamos en cuenta que aunque parezca obvio:

a) el problema debe ser "un problema recursivo" (que tenga sentido aplicar la recursividad)

b) cuando se trabaja con recursión, debe existir el caso "resoluble directo", que permite salir de la recursión (o entraríamos en loop infinito).

El ejemplo más clásico es el cálculo de un factorial. Si factorial de 5 se calcula 1 x 2 x 3 x 4 x 5, por lo tanto podemos hacer un método que reciba el número a calcular, y posteriormente se va a ir llamando a sí mismo restando 1, hasta llegar al caso "resoluble directo", es decir 0, posteriormente iniciará el retorno recursivo y haciendo el cálculo "al revés" de la invocación inicial (revisar ejecución al final del ejemplo).

PD: de paso, lo hacemos usando PHP 7 o superior. Si bien en este ejemplo no se aprovecha mucho, está bueno que nos empecemos a acostumbrar a las nuevas funcionalidades que trae (como en este caso, la validación de tipos tanto en el input como en el output).

/**
 * Cómo resolver el cálculo de un factorial usando recursividad
 *
 * factorial de 5 = 1 x 2 x 3 x 4 x 5
 *
 */


class Factorial{
  
    public function 
calcular(int $numero) : int
    {
      
        if (
$numero 0) {
          
            
// entro en la recursividad ...
            
$aux $this->calcular($numero 1);
          
            
$calculo $aux $numero;
            echo 
"$aux * $numero = $calculo \n";
          
            return 
$calculo;
        } else {
            
// caso resoluble directamente ...
            
return 1;
        }
    }
}


$factorial = new Factorial();

echo 
"resultado = " $factorial->calcular(5) . " \n";


// Ejecución

php index.php 

1 * 1 = 1 
1 * 2 = 2 
2 * 3 = 6 
6 * 4 = 24 
24 * 5 = 120 
resultado = 120 

Espero que les resulte útil! ;-) 

Espero todas sus dudas! 


No hay comentarios.:

Entradas populares