estructura de datos: recursividad
TRANSCRIPT
![Page 1: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/1.jpg)
S
Estructura de Datos2. Recursividad.
http://www.informatik.uni-trier.de/~naeher/Professur/
![Page 2: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/2.jpg)
U2. Recursividad.
Contenido
2.1. Definición
2.2. Procedimientos recursivos
2.3. Ejemplos de casos
![Page 3: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/3.jpg)
U2. Recursividad.
S
2. Recursividad
http://codificando-sin-control.blogspot.com/2010/06/la-recursividad.html
![Page 4: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/4.jpg)
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)
![Page 5: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/5.jpg)
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)
![Page 6: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/6.jpg)
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)
![Page 7: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/7.jpg)
U2. Recursividad.
2.1. Definición (cont.)
Caso base
Parte recursiva
SI
NO
![Page 8: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/8.jpg)
U2. Recursividad.
TIPOS: Recursión simple Recursión múltiple Recursión cruzada o indirecta Recursión anidada
2.2. Procedimientos Recursivos
![Page 9: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/9.jpg)
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
![Page 10: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/10.jpg)
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
![Page 11: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/11.jpg)
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
![Page 12: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/12.jpg)
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);
}
![Page 13: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/13.jpg)
U2. Recursividad.
2.3. Ejemplo de Casos
Factorial (3)
= 3 * Factorial (2)
![Page 14: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/14.jpg)
U2. Recursividad.
Factorial (3)
= 3 *
Factorial (2)
= 2 * Factorial (1)
2.3. Ejemplo de Casos
![Page 15: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/15.jpg)
U2. Recursividad.
Factorial (3)
= 3 *
Factorial (2)
= 2 *
Factorial (1) -- Caso Base
= 1
2.3. Ejemplo de Casos
![Page 16: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/16.jpg)
U2. Recursividad.
Factorial (3)
= 3 *
Factorial (2)
= 2 * 1
2.3. Ejemplo de Casos
![Page 17: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/17.jpg)
U2. Recursividad.
Factorial (3)
= 3 *
Factorial (2)
= 2
2.3. Ejemplo de Casos
![Page 18: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/18.jpg)
U2. Recursividad.
Factorial (3)
= 3 * 2
2.3. Ejemplo de Casos
![Page 19: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/19.jpg)
U2. Recursividad.
Factorial (3)
= 6
![Page 20: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/20.jpg)
U2. Recursividad.
2.3. Ejemplos de casos
FIBONACCI (Leonardo de Pisa) ¿Cómo se calcula la serie Fibonacci?
![Page 21: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/21.jpg)
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
![Page 22: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/22.jpg)
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
![Page 23: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/23.jpg)
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
![Page 24: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/24.jpg)
U2. Recursividad.
2.3. Ejemplos de casosTriángulo de Pascal
11 1
1 2 11 3 3 1
1 4 6 4 1…
![Page 25: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/25.jpg)
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);}
![Page 26: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/26.jpg)
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)
![Page 27: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/27.jpg)
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);}
}}
![Page 28: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/28.jpg)
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);
}
![Page 29: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/29.jpg)
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);}
}}
![Page 30: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/30.jpg)
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.
![Page 31: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/31.jpg)
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.
![Page 32: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/32.jpg)
U2. Recursividad.
Desventajas
Tiempo de procesador.
Espacio en memoria, consume memoria adicional.
![Page 33: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/33.jpg)
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.
![Page 34: Estructura de Datos: Recursividad](https://reader033.vdocuments.site/reader033/viewer/2022061516/557b204bd8b42a4e048b47d0/html5/thumbnails/34.jpg)
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.