recursion java tutorial with examples
Este tutorial detallado sobre la recursividad en Java explica qué es la recursividad con ejemplos, tipos y conceptos relacionados. También cubre Recursión Vs Iteración:
De nuestros tutoriales anteriores en Java, hemos visto el enfoque iterativo en el que declaramos un bucle y luego atravesamos una estructura de datos de manera iterativa tomando un elemento a la vez.
También hemos visto el flujo condicional donde nuevamente mantenemos una variable de ciclo y repetimos un fragmento de código hasta que la variable de ciclo cumple la condición. Cuando se trata de llamadas a funciones, también exploramos el enfoque iterativo para las llamadas a funciones.
=> Consulte TODOS los tutoriales de Java aquí.
top 10 descargadores de música para android
En este tutorial, discutiremos un enfoque diferente de la programación, es decir, el enfoque recursivo.
Lo que vas a aprender:
- ¿Qué es la recursividad en Java?
- Recurrencia vs iteración en Java
- Conclusión
¿Qué es la recursividad en Java?
La recursividad es un proceso mediante el cual una función o un método se llama a sí mismo una y otra vez. Esta función que se llama una y otra vez, ya sea directa o indirectamente, se denomina 'función recursiva'.
Veremos varios ejemplos para entender la recursividad. Ahora veamos la sintaxis de la recursividad.
Sintaxis de recursividad
Cualquier método que implemente Recursion tiene dos partes básicas:
- Llamada al método que puede llamarse a sí mismo, es decir, recursivo
- Una condición previa que detendrá la recursividad.
Tenga en cuenta que una condición previa es necesaria para cualquier método recursivo ya que, si no rompemos la recursividad, seguirá ejecutándose infinitamente y resultará en un desbordamiento de pila.
La sintaxis general de la recursividad es la siguiente:
|_+_|Tenga en cuenta que la condición previa también se denomina condición base. Discutiremos más sobre la condición base en la siguiente sección.
Comprender la recursividad en Java
En esta sección, intentaremos comprender el proceso de recursividad y veremos cómo ocurre. Aprenderemos sobre la condición base, el desbordamiento de la pila y veremos cómo se puede resolver un problema en particular con recursividad y otros detalles similares.
Condición base de recursividad
Mientras escribimos el programa recursivo, primero debemos proporcionar la solución para el caso base. Luego expresamos el problema más grande en términos de problemas más pequeños.
Como un ejemplo, podemos tomar un problema clásico de calcular el factorial de un número. Dado un número n, tenemos que encontrar un factorial de n denotado por n!
Ahora implementemos el programa para calcular el factorial n (¡n!) Usando la recursividad.
|_+_|Producción
En este programa, podemos ver que la condición (n<=1) is the base condition and when this condition is reached, the function returns 1. The else part of the function is the recursive call. But every time the recursive method is called, n is decremented by 1.
Por lo tanto, podemos concluir que, en última instancia, el valor de n se convertirá en 1 o menor que 1 y, en este punto, el método devolverá el valor 1. Se alcanzará esta condición base y la función se detendrá. Tenga en cuenta que el valor de n puede ser cualquiera siempre que satisfaga la condición base.
Resolución de problemas mediante la recursividad
La idea básica detrás del uso de la recursividad es expresar el problema mayor en términos de problemas menores. Además, necesitamos agregar una o más condiciones base para que podamos salir de la recursividad.
Esto ya se demostró en el ejemplo factorial anterior. En este programa, expresamos el n factorial (n!) En términos de valores más pequeños y teníamos una condición base (n<=1) so that when n reaches 1, we can quit the recursive method.
Error de desbordamiento de pila en recursividad
Somos conscientes de que cuando se llama a cualquier método o función, el estado de la función se almacena en la pila y se recupera cuando la función regresa. La pila también se utiliza para el método recursivo.
Pero en el caso de la recursividad, puede ocurrir un problema si no definimos la condición base o cuando la condición base de alguna manera no se alcanza o no se ejecuta. Si se produce esta situación, puede producirse un desbordamiento de la pila.
Consideremos el siguiente ejemplo de notación factorial.
Aquí hemos dado una condición base incorrecta, n == 100.
|_+_|Entonces, cuando n> 100, el método devolverá 1 pero la recursividad no se detendrá. El valor de n seguirá disminuyendo indefinidamente ya que no hay otra condición para detenerlo. Esto continuará hasta que la pila se desborde.
Otro caso será cuando el valor de n<100. In this case, as well the method will never execute the base condition and result in a stack overflow.
Ejemplos de recursividad en Java
En esta sección, implementaremos los siguientes ejemplos usando la recursividad.
# 1) Serie de Fibonacci usando recursividad
La serie de Fibonacci está dada por,
1,1,2,3,5,8,13,21,34,55,…
La secuencia anterior muestra que el elemento actual es la suma de los dos elementos anteriores. Además, el primer elemento de la serie de Fibonacci es 1.
Entonces, en general, si n es el número actual, entonces está dado por la suma de (n-1) y (n-2). Como el elemento actual se expresa en términos de elementos anteriores, podemos expresar este problema mediante la recursividad.
El programa para implementar la serie Fibonacci se detalla a continuación:
|_+_|Producción
# 2) Verifique si un número es un palíndromo usando recursividad
Un palíndromo es una secuencia que es igual cuando la leemos de izquierda a derecha o de derecha a izquierda.
Dado un número 121, vemos que cuando lo leemos de izquierda a derecha y de derecha a izquierda, es igual. Por lo tanto, el número 121 es un palíndromo.
Tomemos otro número, 1242. Cuando lo leemos de izquierda a derecha es 1242 y cuando lo leemos de derecha a izquierda se lee como 2421. Por lo tanto, esto no es un palíndromo.
Implementamos el programa palíndromo invirtiendo los dígitos de los números y comparamos recursivamente el número dado con su representación invertida.
El siguiente programa implementa el programa para verificar el palíndromo.
|_+_|Producción
# 3) Java de recursividad de cadena inversa
Dada una cadena 'Hola' tenemos que invertirla para que la cadena resultante sea 'olleH'.
Esto se hace mediante recursividad. A partir del último carácter de la cadena, imprimimos de forma recursiva cada carácter hasta que se agoten todos los caracteres de la cadena.
El siguiente programa utiliza la recursividad para invertir una cadena determinada.
|_+_|Producción
# 4) Recursión de Java de búsqueda binaria
Un algoritmo de búsqueda binaria es un algoritmo famoso de búsqueda. En este algoritmo, dada una matriz ordenada de n elementos, buscamos en esta matriz el elemento clave dado. Al principio, dividimos la matriz en dos mitades encontrando el elemento medio de la matriz.
Luego, dependiendo de si la clave midimos, limitamos nuestra búsqueda en la primera o segunda mitad de la matriz. De esta forma se repite el mismo proceso hasta encontrar la ubicación de los elementos clave.
Implementaremos este algoritmo usando recursividad aquí.
|_+_|Producción
# 5) Encuentre el valor mínimo en la matriz usando recursividad
Usando la recursividad también podemos encontrar el valor mínimo en la matriz.
El programa Java para encontrar el valor mínimo en la matriz se proporciona a continuación.
|_+_|Producción
Estos son algunos de los ejemplos de recursividad. Aparte de estos ejemplos, se pueden implementar muchos otros problemas en el software utilizando técnicas recursivas.
Tipos de recursividad
La recursividad es de dos tipos en función de cuándo se realiza la llamada al método recursivo.
Son:
# 1) Recurrencia de la cola
Cuando la llamada al método recursivo es la última instrucción ejecutada dentro del método recursivo, se llama “Recursión de cola”.
En la recursividad de cola, la declaración de llamada recursiva generalmente se ejecuta junto con la declaración de retorno del método.
La sintaxis general para la recursividad de cola se proporciona a continuación:
|_+_|# 2) Recurrencia de la cabeza
La recursividad de cabeza es cualquier enfoque recursivo que no sea una recursividad de cola. Entonces, incluso la recursividad general es una recursividad por delante.
La sintaxis de la recursividad de la cabeza es la siguiente:
|_+_|Recurrencia vs iteración en Java
Recursividad | Iteración |
---|---|
La complejidad del tiempo es muy alta. | La complejidad del tiempo está relativamente en el lado inferior. |
La recursividad es un proceso en el que un método se llama a sí mismo repetidamente hasta que se cumple una condición básica. | La iteración es un proceso mediante el cual un fragmento de código se ejecuta repetidamente durante un número finito de veces o hasta que se cumple una condición. |
Es la aplicación de funciones. | Es aplicable para bucles. |
Funciona bien para códigos de menor tamaño. | Funciona bien para códigos de mayor tamaño. |
Utiliza más memoria a medida que cada llamada recursiva se envía a la pila | Se usa comparativamente menos memoria. |
Difícil de depurar y mantener | Más fácil de depurar y mantener |
Da como resultado un desbordamiento de la pila si no se especifica o no se alcanza la condición base. | Puede ejecutarse infinitamente, pero finalmente detendrá la ejecución con errores de memoria |
Preguntas frecuentes
P # 1) ¿Cómo funciona la recursividad en Java?
Responder: En la recursividad, la función recursiva se llama a sí misma repetidamente hasta que se satisface una condición base. La memoria para la función llamada se inserta en la pila en la parte superior de la memoria para la función que llama. Para cada llamada de función, se realiza una copia separada de las variables locales.
Q #2) ¿Por qué se utiliza la recursividad?
Responder: La recursividad se utiliza para resolver aquellos problemas que se pueden dividir en otros más pequeños y todo el problema se puede expresar en términos de un problema más pequeño.
La recursividad también se utiliza para aquellos problemas que son demasiado complejos para ser resueltos mediante un enfoque iterativo. Además de los problemas para los que la complejidad del tiempo no es un problema, utilice la recursividad.
Q #3) ¿Cuáles son los beneficios de la recursividad?
Responder:
Los beneficios de la recursividad incluyen:
- La recursividad reduce la llamada redundante de funciones.
- La recursividad nos permite resolver problemas fácilmente en comparación con el enfoque iterativo.
P # 4) ¿Cuál es mejor: recursividad o iteración?
Responder: La recursividad realiza llamadas repetidas hasta que se alcanza la función base. Por lo tanto, hay una sobrecarga de memoria, ya que se inserta una memoria para cada llamada de función en la pila.
La iteración, por otro lado, no tiene mucha sobrecarga de memoria. La ejecución de la recursividad es más lenta que el enfoque iterativo. La recursividad reduce el tamaño del código mientras que el enfoque iterativo aumenta el tamaño del código.
Q #5) ¿Cuáles son las ventajas de la recursividad sobre la iteración?
Responder:
- La recursividad hace que el código sea más claro y más corto.
- La recursividad es mejor que el enfoque iterativo para problemas como la Torre de Hanoi, recorridos de árboles, etc.
- Como cada llamada de función tiene memoria insertada en la pila, Recursion usa más memoria.
- El rendimiento de la recursividad es más lento que el enfoque iterativo.
Conclusión
La recursividad es un concepto muy importante en el software, independientemente del lenguaje de programación. La recursividad se usa principalmente para resolver problemas de estructura de datos como torres de Hanoi, recorridos de árboles, listas enlazadas, etc. Aunque requiere más memoria, la recursividad hace que el código sea más simple y claro.
lista de adyacencia de grafos de c ++
Hemos explorado todo sobre la recursividad en este tutorial. También hemos implementado numerosos ejemplos de programación para una mejor comprensión del concepto.
=> Lea la serie de formación Easy Java.
Lectura recomendada
- Recursión en C ++
- Iterador de Java: aprenda a usar iteradores en Java con ejemplos
- Interfaz ListIterator en Java con ejemplos
- Tutorial de JAVA para principiantes: más de 100 tutoriales prácticos en vídeo de Java
- Tutorial de Java For Loop con ejemplos de programas
- Java While Loop - Tutorial con ejemplos de programación
- Java Do While Loop - Tutorial con ejemplos
- Matriz irregular en Java - Tutorial con ejemplos