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
