Recursividad

Los programas que hemos visto hasta ahora se estructuran generalmente como métodos que se llaman entre sí, en forma disciplinada y jerárquica. Sin embarga, para algunos problemas es necesario hacer que un método se llame a sí mismo. Un método recursivo es un método que se llama a sí mismo, ya sea directa o indirectamente, a través de otro método.

Cálculos recursivos de un factorial

Como un ejemplo de funcionamiento del concepto de recursividad, escribiremos un programa recursivo para realizar un popular cálculo matemático. Considere un factorial de un entero n no negativo que se escribe como n!. Por ejemplo, 5! es el producto de 5 * 4 * 3 * 2 * 1, que es igual a 120.

El factorial puede calcularse iterativamente (no recursivamente) utilizando la función for de la siguiente manera.

factorial = 1;
for (int contador = numero; contador >= 1; contador –)
factorial *= contador;

Para llegar a una declaración recursiva del método del factorial, podemos observar la siguiente relación:

n! = n * (n – 1)!

Por ejemplo, 5! es equivalente a 5 * 4!, como se muestra acá:

5! = 5 * 4 * 3 * 2 * 1
5! = 5 * (4 * 3 * 2 * 1)
5! = 5 * 4!

Ahora utilicemos un ejemplo para calcular e imprimir los factoriales del 0 al 5

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package cliente;

/**
 *
 * @author manix
 */

import java.awt.*;

import javax.swing.*;

public class PruebaFactorial extends JApplet {
   JTextArea areaSalida;

   // crear GUI y calcular factoriales del 0-10
    @Override
   public void init()
   {
      areaSalida = new JTextArea();

      Container contenedor = getContentPane();
      contenedor.add( areaSalida );

      // calcular los factoriales de 0 hasta 10
      for ( long contador = 0; contador <= 5; contador++ )
         areaSalida.append( contador + "! = " +
            factorial( contador ) + "n" );

   } // fin del método init

   // declaración recursiva del método factorial
   public long factorial( long numero )
   {
      // caso base
      if ( numero <= 1 )
         return 1;

      // paso recursivo
      else
         return numero * factorial( numero - 1 );

   } // fin del método factorial

} // fin de la clase PruebaFactorial

Leave a Reply