Se les llama funciones recursivas a aquellas que durante su
ejecución se llaman a sí mismas. Sus características básicas son:
1) Su primer llamado ocurre fuera de la función.
2) Suelen tener un argumento que es el que establece la
condición de finalización de las llamadas recursivas.
3) Dentro de su mismo código, incluye la llamada a sí misma.
4) Dentro de su mismo código incluye una condición que
termina las llamadas consecutivas. Esta condición necesita que en algún
momento, el argumento de la función que opera como variable de control se
modifique para que la condición se cumpla, caso contrario, la llamada de la
función recursiva continuaría sin parar.
funcionRecursiva (variable de control)
{
if (condición
de paro no se cumple)
{
funcionRecursiva(variable
de control)
}
}
Por otra parte las estructuras de ciclo de número definido de repeticiones repiten una serie de líneas de código tantas veces como lo establezca
una variable contadora. Uno de los tokens más utilizados para ello es el for
con esta estructura básica:
for (contador = valor inicial; condición de paro; incremento
de contador)
{
// Código que se
repite por ciclo.
}
Vemos entonces las semejanzas entre ambos recursos de
programación. Aprovechando esas coincidencias, podemos seguir la siguiente
plantilla para la conversión de una estructura de ciclo de repeticiones
definidas como el for a una función recursiva (y viceversa):
Como ejemplo de lo anterior, el siguiente programa escrito en Java, repite
cinco veces un mensaje. La primera vez, lo hace utilizando un ciclo tradicional
de repeticiones definidas y la segunda, a través de una función recursiva:
/**
* Muestra cómo se
lleva a cabo la equivalencia entre un ciclo
* de número de
repeticiones definidas (for) y una función recursiva.
*
* @author J.B.
*/
public class FuncionRecursiva1 {
private static
void ciclo()
{
// Ciclo for
tradicional
int i;
for (i=1;
i<=5; i++)
{
System.out.println("Mensaje número " + i);
}
}
private static
void recursiva(int i)
{
// Función
recursiva
if (i <= 5)
{
System.out.println("Mensaje número " + i);
recursiva
(i+1);
}
}
public static void
main(String[] args) {
System.out.println("EJECUCIÓN POR CICLO TRADICIONAL FOR:");
ciclo(); //
Llamada al ciclo tradicional.
System.out.println("");
System.out.println("EJECUCIÓN POR FUNCIÓN RECURSIVA:");
recursiva(1);
// Llamada a la función recursiva con su valor inicial.
}
}
Ejecución:
No hay comentarios:
Publicar un comentario