Recursividad en POO - Java

6
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) {

Transcript of Recursividad en POO - Java

Page 1: Recursividad en POO - Java

RECURSIVIDADConcepto:

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); }}

Page 2: Recursividad en POO - Java

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;

elsereturn 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ódigoLlamada a P

}

Page 3: Recursividad en POO - Java

¿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 Fibonaccipublic class CalculoFibonacci{

public int fibonacci(int numero){

if ((numero == 0 ) || (numero == 1) )return numero;

elsereturn fibonacci(numero - 1) + fibonacci(numero - 2);

}

public void mostrarFibonacci(){

for (int contador = 0; contador <= 10; contador++)System.out.printf( "Fibonacci de %d es: %d\n", contador, fibonacci( contador) );

}}

public class PruebaFibonacci{

public static void main(String args[]){

CalculoFibonacci calculoFibonacci = new CalculoFibonacci();calculoFibonacci.mostrarFibonacci();

}}

Impresión:Fibonacci de 0 es: 0Fibonacci de 1 es: 1Fibonacci de 2 es: 1Fibonacci de 3 es: 2Fibonacci de 4 es: 3Fibonacci de 5 es: 5Fibonacci de 6 es: 8Fibonacci de 7 es: 13Fibonacci de 8 es: 21Fibonacci de 9 es: 34Fibonacci de 10 es: 55

Subprograma Q{

CódigoLlamada a P

}

Subprograma P{

CódigoLlamada a Q

}

Page 4: Recursividad en POO - Java

¿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.

Conteo infinito sin salida.

public int conteo(int n){

n = conteo(n+1);return n

}

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ÁN8 DE SEPTIEMBRE DE 2015