Estructura de Datos: Recursividad

Preview:

Citation preview

S

Estructura de Datos2. Recursividad.

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

U2. Recursividad.

Contenido

2.1. Definición

2.2. Procedimientos recursivos

2.3. Ejemplos de casos

U2. Recursividad.

S

2. Recursividad

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

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

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.

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.

2.1. Definición (cont.)

Caso base

Parte recursiva

SI

NO

U2. Recursividad.

TIPOS: Recursión simple Recursión múltiple Recursión cruzada o indirecta Recursión anidada

2.2. Procedimientos Recursivos

U2. Recursividad.

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

Ejemplo: 0!, 1!, 2!, 3!, 4!, 5!

2.3. Ejemplo de Casos

U2. Recursividad.

Factorial (forma iterativa)

-- Caso Base

factorial = 1;

-- Parte Recursiva

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

factorial *= i;

factorial *= i

SI

i = n i >= 1 i --

n

factorial =1

2.3. Ejemplo de Casos

U2. Recursividad.

Factorial (forma recursiva)int factorial (int n){

if (n <= 1)

return 1;

else

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

}

n <= 1 return 1

return(n * factorial (n-1))

SI

NO

n

2.3. Ejemplo de Casos

U2. Recursividad.

Ejercicio

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.

2.3. Ejemplo de Casos

Factorial (3)

= 3 * Factorial (2)

U2. Recursividad.

Factorial (3)

= 3 *

Factorial (2)

= 2 * Factorial (1)

2.3. Ejemplo de Casos

U2. Recursividad.

Factorial (3)

= 3 *

Factorial (2)

= 2 *

Factorial (1) -- Caso Base

= 1

2.3. Ejemplo de Casos

U2. Recursividad.

Factorial (3)

= 3 *

Factorial (2)

= 2 * 1

2.3. Ejemplo de Casos

U2. Recursividad.

Factorial (3)

= 3 *

Factorial (2)

= 2

2.3. Ejemplo de Casos

U2. Recursividad.

Factorial (3)

= 3 * 2

2.3. Ejemplo de Casos

U2. Recursividad.

Factorial (3)

= 6

U2. Recursividad.

2.3. Ejemplos de casos

FIBONACCI (Leonardo de Pisa) ¿Cómo se calcula la serie Fibonacci?

U2. Recursividad.

2.3. Ejemplos de casos

FIBONACCI (Leonardo de Pisa) ¿Cómo se calcula la serie Fibonacci?

Condiciones: Fibonacci (0) = 0 n=0 Fibonacci (1) = 1 n=1 Fibonacci (n) = Fibonacci(n-1)+Fibonacci(n-2)

n>1

U2. Recursividad.

Fibonacci(4) = Fibonacci (4-1) + Fibonacci (3-1)

Fibonacci(3) = Fibonacci (3-1) + Fibonacci (3-2)

Fibonacci(2) =Fibonacci (2-1)+Fibonacci (2-2)

Fibonacci(2) = Fibonacci (2-1)+Fibonacci (2-2)

Fibonacci (1)

-- Caso Base

Fibonacci (0)

-- Caso Base

Fibonacci (1)

-- Caso Base

Fibonacci (0)

-- Caso Base

Fibonacci (1)

-- Caso Base

2.3. Ejemplo de Casos

U2. Recursividad.

F(3)

F(1)

F(4)

F(2)

F(1)

F(0)

+

+

return 1return 1return 1

F(2)

F(1)

F(0)+

return 0return 1

+

2.3. Ejemplo de Casos

U2. Recursividad.

2.3. Ejemplos de casosTriángulo de Pascal

11 1

1 2 11 3 3 1

1 4 6 4 1…

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

Práctica (Equipo)

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.

Práctica (Equipo)Fibonacci

int Fibonacci (int n){//Casos Baseif (n == 0)

return 0;else{

if (n == 1)return 1;

// Paso recursivoelse{

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

}}

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

Práctica (Equipo)Elevar a una potencia

int Potencia (int n, int exp){//Casos Baseif (exp == 0)

return 1;else{

if (exp == 1)return n;

// Paso recursivoelse{

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

}}

U2. Recursividad.

Recursividad & Iteración

RECURSIVIDAD

Llamadas repetidas a los métodos.

Termina cuando se reconoce un caso base.

Se aproxima poco a poco a la terminación.

Infinita cuando no reduce el problema.

Sobrecarga de llamadas a métodos.

ITERACIÓN

Instrucción de repetición explícita.

Termina cuando falla la condición.

Repetición controlada por contador.

Infinita cuando la condición nunca se vuelve falsa.

U2. Recursividad.

Ventajas

Menos líneas de código.

Refleja el problema con más naturalidad.

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

U2. Recursividad.

Desventajas

Tiempo de procesador.

Espacio en memoria, consume memoria adicional.

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

34

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

Recommended