Algoritmos Recursivos - Ejercicios Resueltos Parte 1
En este artículo aplicaré los conceptos de recursividad para mejorar la comprensión sobre este tema que para muchos continúa siendo un gran dolor de cabeza; es así que paso a paso de manera minuciosa, detenidamente y con su respectiva descripción iré explicando cada ejercicio, en recursividad para detener el ciclo de llamadas así mismo se debe emplear una condición conocida como la "condición base", cada ejercicio tendrá una condición distinta dependiendo de lo que se quiere y como se desea que lo ejecute.
Empieza a pensar de forma recursiva, es muy sencillo y claro que no todos los ejercicios se resuelven de ésta manera (solo aquellos que se desea simplificar), hay que utilizar la lógica correcta pues el lenguaje de programación es irrelevante.
1.- En el siguiente ejercicio crearé una función recursiva que separe las palabras de una oración y las muestre una por una.
Solución:
Condición base:
Para ello tendré que establecer una condición base que funcione de forma correcta, y debido a que iré recorriendo letra por letra la cadena de caracteres mi iterador "i" debe ser diferente de la longitud de la cadena, la cual seria:
if(i != a.length()) { }Explicación de variables:
i: Es el iterador de ejecuciones este contendrá la posición de cada caracter en el recorrido.
a: Es la cadena de caracteres ingresadas por el usuario.
Aplicación:
Para ello he creado una función/método llamado separarPalabra la cual recibe dos argumentos/parámetros (el primer argumento sería la cadena de caracteres, y el segundo argumento sería el iterador).
Lo primero que agregaré será la condición base, que contendrá un if-else anidado el cual evaluará si al extraer según la posición del iterador la letra es igual a un carácter "espacio". Si esto es cierto entonces inmediatamente se muestra en pantalla toda la palabra con el método substring tomando desde la posición cero (inicio) hasta la posición donde se encontró el vacío (final) y se vuelve a llamar a la función/método separarPalabra actualizando la cadena cortando la palabra ya mostrada en pantalla y con el iterador en 0 para iniciar nuevamente. De no ser cierto simplemente se llama a la función/método separarPalabra enviando la cadena tal cual es pero con el iterador incrementado en uno para seguir recorriendo la cadena de caracteres:
public static void separarPalabra(String a, int i) { if(i != a.length()) { //Condición base if(a.charAt(i) == ' ') { //Compara si el carácter extraído es igual a vacío. System.out.println(a.substring(0, i)); //Imprimir la palabra encontrada. separarPalabra(a.substring(i + 1, a.length()), 0); //Llamar nuevamente a la función/método separarPalabra alterando la cadena de caracteres pues se le resta la palabra anteriormente encontrada y con el iterador en 0 nuevamente } else { separarPalabra(a, i + 1); //Llamar nuevamente a la función/método colocando la cadena como está e incrementar en uno el iterador. } } else { System.out.println(a.substring(0, i)); //Mostrar la última palabra encontrada. } }Descarga:
Puedes descargar el ejercicio de la siguiente dirección (clic aquí).
2.- Eliminar las vocales de una oración y mostrarla sin ellas.
Solución:
Condición base:
Para ello tendré que establecer una condición base que funcione de forma correcta, y debido a que iré recorriendo letra por letra la cadena de caracteres mi iterador "i" debe ser diferente de la longitud de la cadena, la cual seria:
if(i != a.length()) { }
A continuación se muestra cual sería un posible ingreso de un conjunto de caracteres y su resultado en pantalla.
/* String cadena = "Tu cafe java"; Respuesta -> T cf jv. */
Explicación de variables:
i: Es el iterador de ejecuciones este contendrá la posición de cada caracter en el recorrido.
a: Es la cadena de caracteres ingresadas por el usuario.
f: Auxiliar para guardar la nueva cadena sin vocales.
f: Auxiliar para guardar la nueva cadena sin vocales.
Aplicación:
Para ello he creado una función/método llamado eliminarVocal la cual recibe dos argumentos/parámetros (el primer argumento sería la cadena de caracteres, y el segundo argumento sería el iterador).
Lo primero que agregaré será la condición base, que contendrá un if-else anidado el cual evaluará si al extraer según la posición del iterador la letra es igual a cualquier vocal (a, e, i, o, u). Si esto es cierto entonces inmediatamente se inicializa la variable f que acumulará la nueva cadena sin vocales, quitando especificamente la vocal desde su posición, seguido se llama nuevamente a la función/método eliminarVocal enviando los argumentos el primero con la nueva cadena y el segundo con el iterador en cero. De no ser cierto simplemente se llama a la función/método eliminarVocal enviando la cadena tal cual es pero con el iterador incrementado en uno para seguir recorriendo la cadena de caracteres, y cuando la condición base ya no sea cierta se imprimirá la cadena que se obtuvo (la sin vocales):
public static void eliminarVocal(String a, int i) { if(i != a.length()) { //Condición base. if(a.charAt(i)=='a' || a.charAt(i)=='e' || a.charAt(i)=='i' || a.charAt(i)=='o' || a.charAt(i)=='u') { String f = ""; //Variable que recepciona la nueva cadena generada. f = a.substring(0, i) + "" + a.substring(i + 1, a.length()); eliminarVocal(f, 0); } else { eliminarVocal(a, i+1); } } else { System.out.println(a); } }
Descarga:
Puedes descargar el ejercicio de la siguiente dirección (clic aquí).
3.- Si tenemos el siguiente ejemplo, generar una función recursiva para lograr la solución.
Solución:
Condición base:
Para
ello tendré que establecer una condición base que funcione de forma
correcta, y debido a que iré recorriendo letra por letra la cadena de
caracteres mi iterador "i" debe ser diferente de la longitud de la
cadena, la cual seria:
/* Se debe ingresar una cadena de caracteres, por ejemplo se ingresa la palabra: "Bienvenido". El resultado debe ser el siguiente: B Bi Bie Bien Bienv Bienve Bienven Bienveni Bienvenid Bienvenido */
Explicación de variables:
i: Es el iterador de ejecuciones este contendrá la posición de cada caracter en el recorrido.
a: Es la cadena de caracteres ingresadas por el usuario.
Aplicación:
Para
ello he creado una función/método llamado triangulo la cual recibe
dos argumentos/parámetros (el primer argumento sería la cadena de
caracteres, y el segundo argumento sería el iterador).
Empezaré dejando un espacio en blanco utilizando el método substring iniciando en la posición 0 y finalizando en la posición 0, luego agregaré la condición base dentro llamará a la función/método triangulo en el que se enviará como primer argumento la cadena y como segundo argumento el iterador incrementado en uno:
public static void triangulo(String a, int i) { System.err.println(a.substring(0, i)); //Muestra desde el inicio hasta el último caracter que se ha quedado el System.err permite imprimir en color rojo por error. if(i != a.length()) { //Condición base. triangulo(a, i + 1); //Llamar nuevamente a la función/método incrementando el iterador en uno cada vez que sea llamado. } }
Descarga:
Puedes descargar el ejercicio de la siguiente dirección (clic aquí).
En estos ejercicios podrás darte cuenta que la condición base es idéntica en todos ellos, sin embargo este puede variar significativamente según el enunciado propuesto. Espero haya sido de tu interés no te olvides dejar tu comentario para continuar mejorando y compartir con los tuyos en las redes sociales.
En estos ejercicios podrás darte cuenta que la condición base es idéntica en todos ellos, sin embargo este puede variar significativamente según el enunciado propuesto. Espero haya sido de tu interés no te olvides dejar tu comentario para continuar mejorando y compartir con los tuyos en las redes sociales.
Comentarios
Publicar un comentario