Recursividad

34
S Estructura de Datos 2. Recursividad. http://www.informatik.uni-trier.de/~naeher/Professur/

Transcript of Recursividad

Page 1: Recursividad

S

Estructura de Datos2. Recursividad.

http://www.informatik.uni-trier.de/~naeher/Professur/

Page 2: Recursividad

Contenido

2.1. Definición

2.2. Procedimientos recursivos

2.3. Ejemplos de casos

U2. Recursividad.

Page 3: Recursividad

S

2. Recursividad

U2. Recursividad.

http://codificando-sin-control.blogspot.com/2010/06/la-recursividad.html

Page 4: Recursividad

2.1. Definición

Alternativa diferente para implementar estructuras de repetición

(ciclos). Se apoya en la modularidad, pues a través de los

módulos se hacen llamadas recursivas.

Un módulo es recursivo si, como parte de su definición, incluye

al menos una llamada a sí mismo

(Martínez, R. & Quiroga, E., 2001)

U2. Recursividad.

Page 5: Recursividad

2.1. Definición (cont.)

A recursive definition is one that refers to the object it is defining

as part of its definition.

“A bouquet of roses one rose, or two roses, or three roses, …”

(Decker, H., 1993)

U2. Recursividad.

Page 6: Recursividad

2.1. Definición (cont.)

Un método recursivo es un método que se llama así mismo, ya

sea directa o indirectamente, a través de otro método.

(Deitel, H. M. & Deitel P. J., 2004)

Un método parcialmente definido en términos de sí mismo, ya

sea directa o indirectamente, a través de otro método.

(Weiss, M. A)

U2. Recursividad.

Page 7: Recursividad

2.1. Definición (cont.)

SI

NO

U2. Recursividad.

Page 8: Recursividad

S TIPOS:

S Recursión simple

S Recursión múltiple

S Recursión cruzada o indirecta

S Recursión anidada

U2. Recursividad.

2.2. Procedimientos Recursivos

Page 9: Recursividad

S FACTORIAL

S ¿Cómo se calcula el factorial de un número?

S Ejemplo:

S 0!, 1!, 2!, 3!, 4!, 5!

U2. Recursividad.

2.3. Ejemplo de Casos

Page 10: Recursividad

S Factorial (forma iterativa)

-- Caso Base

factorial = 1;

-- Parte Recursiva

for (int i =n; i >= 1; i --)

factorial *= i;

U2. Recursividad.

SI

2.3. Ejemplo de Casos

Page 11: Recursividad

S Factorial (forma recursiva)

int factorial (int n){

if (n <= 1)

return 1;

else

return (n * factorial ( n-1 ));

}

SI

NO

U2. Recursividad.

2.3. Ejemplo de Casos

Page 12: Recursividad

Ejercicio

S Encuentre el error en el siguiente método recursivo y explique cómo corregirlo:

public int suma(int n){

if (n == 0)return 0;

elsereturn n + suma (n);

}

U2. Recursividad.

Page 13: Recursividad

2.3. Ejemplo de Casos

U2. Recursividad.

Page 14: Recursividad

U2. Recursividad.

2.3. Ejemplo de Casos

Page 15: Recursividad

U2. Recursividad.

2.3. Ejemplo de Casos

Page 16: Recursividad

U2. Recursividad.

2.3. Ejemplo de Casos

Page 17: Recursividad

U2. Recursividad.

2.3. Ejemplo de Casos

Page 18: Recursividad

U2. Recursividad.

2.3. Ejemplo de Casos

Page 19: Recursividad

U2. Recursividad.

Page 20: Recursividad

2.3. Ejemplos de casos

S FIBONACCI (Leonardo de Pisa)

S ¿Cómo se calcula la serie Fibonacci?

U2. Recursividad.

Page 21: Recursividad

2.3. Ejemplos de casos

S FIBONACCI (Leonardo de Pisa)

S ¿Cómo se calcula la serie Fibonacci?

S Condiciones:

S Fibonacci (0) = 0 n=0

S Fibonacci (1) = 1 n=1

S Fibonacci (n) = Fibonacci(n-1)+Fibonacci(n-2) n>1

U2. Recursividad.

Page 22: Recursividad

U2. Recursividad.

2.3. Ejemplo de Casos

Page 23: Recursividad

U2. Recursividad.

+

+

+

+

2.3. Ejemplo de Casos

Page 24: Recursividad

2.3. Ejemplos de casosTriángulo de Pascal

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

U2. Recursividad.

Page 25: Recursividad

2.3. Ejemplos de casos

TRIÁNGULO DE PASCAL

int comb(int n, int m){

if ((n == 0) || (n == m))

return 1;else

return comb(n-1,m-1) + comb(n-1,m);}

U2. Recursividad.

Page 26: Recursividad

Práctica (Equipo)

S De los siguientes problemas resueltos de forma

iterativa, encontrar su solución recursiva mediante

codificación:

1. Fibonacci (n-1) + (n-2)

2. Conversión de un número decimal a binario (n/2, n%2)

3. Potencia (base, exponente)

U2. Recursividad.

Page 27: Recursividad

Práctica (Equipo)Fibonacci

int Fibonacci (int n){

//Casos Base

if (n == 0)

return 0;

else{

if (n == 1)

return 1;

// Paso recursivo

else{

return Fibonacci(n-1)+Fibonacci(n-2);

}

}

}

U2. Recursividad.

Page 28: Recursividad

Práctica (Equipo)Conversión Decimal a Binario

void aBinario (int n){

// Paso recursivo

if (n >= 2)

aBinario (n/2);

System.out.print(n%2);

}

U2. Recursividad.

Page 29: Recursividad

Práctica (Equipo)Elevar a una potencia

int Potencia (int n, int exp){

//Casos Base

if (exp == 0)

return 1;

else{

if (exp == 1)

return n;

// Paso recursivo

else{

return n * Potencia(n, exp-1);

}

}

}

U2. Recursividad.

Page 30: Recursividad

Recursividad & Iteración

RECURSIVIDAD

S Llamadas repetidas a los métodos.

S Termina cuando se reconoce un caso base.

S Se aproxima poco a poco a la terminación.

S Infinita cuando no reduce el problema.

S Sobrecarga de llamadas a métodos.

ITERACIÓN

S Instrucción de repetición explícita.

S Termina cuando falla la condición.

S Repetición controlada por contador.

S Infinita cuando la condición nunca se vuelve falsa.

U2. Recursividad.

Page 31: Recursividad

Ventajas

S Menos líneas de código.

S Refleja el problema con más naturalidad.

S Produce un programa más fácil de entender y depurar.

U2. Recursividad.

Page 32: Recursividad

Desventajas

S Tiempo de procesador.

S Espacio en memoria, consume memoria adicional.

U2. Recursividad.

Page 33: Recursividad

Referencias

1. Martínez, R. & Quiroga, E. (2001). Estructura de datos. Referencia

práctica con orientación a objetos. Thomson Learning.

2. Decker, H. (1993). Working Classes. Data Structures and algorithms

using C++. PWS Publishing Company.

3. Deitel, H. M. & Deitel P. J. (2004). Cómo programar en JAVA 5ª

Edición. Pearson Hall.

4. Weiss, M. A. Estructura de datos en Java. Ed. Addison Wesley.

U2. Recursividad.

Page 34: Recursividad

¡ Gracias por su atención !

www.tecmartinez.edu.mx

Tel y Fax: (232) 3.73.52.40 . CP 93600

Miguel Hidalgo # 101, Col. Adolfo Ruiz Cortínez . Martínez de la Torre, Veracruz, México.

34