Definición y concepto de la recursividad en Java. Mas algunos otros ejemplos de métodos que se presentan de manera directa o indirecta. Tema visto en estructura de datos.
PSICOLOGÍA. UNA INTRODUCCIÓN. ALCIRA ORSINI Y LETICIA BOSSELLINI 3.pdf
Recursividad en Java
1. RECURSIVIDAD
Concepto:
La recursividad (recursión) es aquella propiedad que posee un método por la cual puede llamarse a sí
mismo. Aunque se puede utilizar la recursividad como una alternativa a la iteración, una solución recursiva
es, normalmente, menos eficiente en términos de tiempo de computadora que una solución iterativa,
debido a las operaciones auxiliares que llevan consigo las invocaciones suplementarias a los métodos; sin
embargo, en muchas circunstancias, el uso de la recursión permite a los programadores especificar
soluciones naturales, sencillas, que serían, en caso contrario, difíciles de resolver. Por esta causa, la
recursión es una herramienta poderosa e importante en la resolución de problemas y en la programación.
Diversas técnicas algorítmicas utilizan la recursión, como los algoritmos divide y vence y los algoritmos de
vuelta atrás.
- Estructuras de Datos en Java - Luis Joyanes Aguilar. McGraw-Hill editorial
Un método recursivo puede llamar a otro método, que a su vez puede hacer una llamada de vuelta al
método recursivo. A dicho proceso se le conoce como llamada recursiva indirecta o recursividad indirecta.
Por ejemplo, el método A llama al método B, que hace una llamada de vuelta al método A. Esto se sigue
considerando como recursividad, debido a que la segunda llamada al método A se realiza mientras la
primera sigue activa; es decir, la primera llamada al método A no ha terminado todavía de ejecutarse
(debido a que está esperando que el método B le devuelva un resultado) y no ha regresado al método
original que llamó al método A.
- Como programar en Java – Deitel, séptima edición. Pearson editorial.
Un objeto recursivo es aquel que aparece en la definición de sí mismo, así como el que se llama a sí mismo.
Los árboles, por ejemplo, representan estructuras de datos, no lineales y dinámicas, más eficientes que
existen actualmente en la computación. La característica de los arboles es que son estructuras
inherentemente recursivas. Es decir, cualquier actividad de programación que se realice con árboles se
utiliza la recursividad.
- Estructuras de Datos - Silvia Guardati, tercera edición. McGraw-Hill editorial
Ejemplo de un método recursivo directo:
public class Adicion
{
public static void main(String []args)
{
Adicion n = new Adicion();
System.out.println(n.suma(5,4));
}
public int suma(int a, int b)
{
if (b == 0)
return a;
else
if (a == 0)
return b;
else
return 1 + suma(a, b - 1);
}
}
2. Impresión:
9
¿A qué se le conoce como recursividad directa? Acompáñelo de un ejemplo.
Se le llama caso de recursividad directa, cuando el programa o subprograma se llama directamente a sí
mismo. Por ejemplo como se muestra en la siguiente figura, la cual representa un programa y en alguna
parte de él aparece una llamada a sí mismo.
Ejemplo de un método recursivo directo:
//Programa que calcula e imprime el factorial del numero 5.
public class CalculoFactorial
{
public int factorial(int numero)
{
if ( numero <= 1 )
return 1;
else
return numero * factorial( numero - 1 );
}
}
public class PruebaFactorial
{
public static void main( String args[] )
{
CalculoFactorial calculoFactorial = new CalculoFactorial();
System.out.printf(“5! = “+calculoFactorial.factorial(5));
}
}
Impresión:
5! = 120
Subprograma P
{
Código
Llamada a P
}
3. ¿A qué se le conoce como recursividad indirecta? Acompáñelo de un ejemplo.
Se le conoce a recursividad indirecta, cuando el subprograma llama a otro, y éste, en algún momento, llama
nuevamente al primero. Por ejemplo, la siguiente figura muestra como el subprograma P llama al
subprograma Q y éste, a su vez, invoca al primero; es decir, el control regresa a P
Ejemplo de un método recursivo indirecto:
//Programa que calcula e imprime los 10 primeros Fibonacci
public class CalculoFibonacci
{
public int fibonacci(int numero)
{
if ((numero == 0 ) || (numero == 1) )
return numero;
else
return fibonacci(numero - 1) + fibonacci(numero - 2);
}
public void mostrarFibonacci()
{
for (int contador = 0; contador <= 10; contador++)
System.out.printf( "Fibonacci de %d es: %dn", contador,
fibonacci( contador) );
}
}
public class PruebaFibonacci
{
public static void main(String args[])
{
CalculoFibonacci calculoFibonacci = new CalculoFibonacci();
calculoFibonacci.mostrarFibonacci();
}
}
Impresión:
Fibonacci de 0 es: 0
Fibonacci de 1 es: 1
Fibonacci de 2 es: 1
Fibonacci de 3 es: 2
Fibonacci de 4 es: 3
Fibonacci de 5 es: 5
Fibonacci de 6 es: 8
Fibonacci de 7 es: 13
Fibonacci de 8 es: 21
Fibonacci de 9 es: 34
Fibonacci de 10 es: 55
Subprograma P
{
Código
Llamada a Q
}
Subprograma Q
{
Código
Llamada a P
}
4. ¿A qué se le conoce como componente base?
El componente base se define como la última instancia que obtiene un método recursivo permitiéndole a
este ser finito.
Para que una definición recursiva este completamente identificada es necesario tener un componente base
que se calcule sin recursividad.
Las siguientes figuras muestran el ejemplo de un caso infinito a falta de un componente base, mientras que
el segundo es finito y devuelve un resultado.
Conclusiones
En este trabajo puedo concluir que la recursividad es una propiedad importante en los métodos que nos
permite volver a llamar al mismo método en sí. Puede darse el caso en el que, un método A se llame a sí
mismo, a este caso se le llama recursividad directa, pero si se da el caso donde el método A llama a un
segundo método B y este vuele a llamar al método A, se dice entonces que es recursividad indirecta.
Para que un método recursivo sea finito debe contener un componente base, también se le conoce como
caso base, el cual debe ser producto de un cálculo no recursivo, y podrá ser la última instancia que puede
tomar una llamada recursiva.
public int conteo(int n)
{
n = conteo(n+1);
return n
}
Conteo infinito sin salida.
public int conteo(int n)
{
if(n==5)
return 1;
else
return n + conteo(n+1);
}
Conteo hasta 11.
ALUMNO: PACHECO CHAVEZ ANGEL MARTIN.
MATERIA: ESTRUCTURA DE DATOS.
TERCER SEMESTRE – INSTITUTO TECNOLÓGICO DE CIUDAD GUZMÁN
8 DE SEPTIEMBRE DE 2015