martes, 3 de mayo de 2016

EQUIVALENCIA ENTRE CICLOS DE NÚMERO DEFINIDO DE REPETICIONES Y FUNCIONES RECURSIVAS


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

Seguidores