Recursividad
-
Upload
pedro-menendez -
Category
Education
-
view
339 -
download
1
Transcript of Recursividad
S
Estructura de Datos2. Recursividad.
http://www.informatik.uni-trier.de/~naeher/Professur/
Contenido
2.1. Definición
2.2. Procedimientos recursivos
2.3. Ejemplos de casos
U2. Recursividad.
S
2. Recursividad
U2. Recursividad.
http://codificando-sin-control.blogspot.com/2010/06/la-recursividad.html
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.)
SI
NO
U2. 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
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
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
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
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.
2.3. Ejemplo de Casos
U2. Recursividad.
U2. Recursividad.
2.3. Ejemplo de Casos
U2. Recursividad.
2.3. Ejemplo de Casos
U2. Recursividad.
2.3. Ejemplo de Casos
U2. Recursividad.
2.3. Ejemplo de Casos
U2. Recursividad.
2.3. Ejemplo de Casos
U2. Recursividad.
2.3. Ejemplos de casos
S FIBONACCI (Leonardo de Pisa)
S ¿Cómo se calcula la serie Fibonacci?
U2. 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.
U2. Recursividad.
2.3. Ejemplo de Casos
U2. Recursividad.
+
+
+
+
2.3. Ejemplo de Casos
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.
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)
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.
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.
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 Base
if (exp == 0)
return 1;
else{
if (exp == 1)
return n;
// Paso recursivo
else{
return n * Potencia(n, exp-1);
}
}
}
U2. 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.
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.
Desventajas
S Tiempo de procesador.
S 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.
U2. 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