Tema 2-Recursividad
Tema 2-Recursividad
Tema 2-Recursividad
Recursividad
Estructuras de Datos
1
¿Qué es la recursividad?
Es un concepto fundamental en
matemáticas y en computación.
2
Función recursiva
3
Función recursiva
Caso recursivo: una solución que vuelve a
utilizar la función original, con parámetros que
se acercan más al caso base.
Pasos que sigue el caso recursivo:
4
Recursividad
5
Función
recursiva
6
¿Cómo escribir una función en forma
recursiva?
<tipo_de_regreso><nom_fnc> (<param>){
[declaración de variables]
[condición de salida]
[instrucciones]
[llamada a <nom_fnc> (<param>)]
return <resultado>
}
7
¿Por qué escribir
programas recursivos?
Son más cercanos a la descripción matemática.
8
Ejemplo: factorial
Escribe un programa que calcule el factorial
(!) de un entero positivo. He aquí algunos
ejemplos de factoriales:
◦ 0! = 1
◦ 1! = 1
◦ 2! = 2 ➔ 2! = 2 * 1!
◦ 3! = 6 ➔ 3! = 3 * 2!
◦ 4! = 24 ➔ 4! = 4 * 3!
◦ 5! = 120 ➔ 5! = 5 * 4!
9
Razonamiento recursivo
Aquí podemos ver la secuencia del factorial:
1 si N == 0 (base)
N! =
N * (N – 1) ! si N > 0 (recursión)
10
Solución Recursiva
11
Ejemplo: factorial
(iterativo vs recursivo)
12
Recursión vs. iteración
En ambos casos podemos tener
ciclos infinitos
Repetición Terminación
Recursión: Iteración:
Recursión: se
Iteración: ciclo repetidas el ciclo termina reconoce el
explícito invocaciones a o la condición caso base
método del ciclo falla
13
Ejercicio
Considere la siguiente ecuación recurrente:
an = an-1 + 2n
a0 = 1
14
Solución del ejercicio anterior
double a (int n) {
if ( n==0)
return 1;
else
return a( n – 1) + Math.pow( 2, n);
15
Elementos de la recursividad
16
Una imagen dice más que mil
palabras…
17
¿Cuándo usar recursividad?
Sí usar: No usar:
18
Tipos de recursividad.
19
Tipos de recursividad.
20
Otros ejemplos
●
21
Prueba de escritorio
cadena=“HOLA”
H O L A
Pos → 0 1 2 3
INVOCACIÓN CADENA POS invierte(cad,pos+1) + Valor de retorno
charAt(pos)
22
Otros Ejemplos de recursividad:
23
Ejercicio:
a) misterio(“seres”, 0, 4);
24
Ejercicio:
a) misterio(“seres”, 0, 4); // true
return misterio(“seres”, 1, 3)
C=“seres” limIzq=1 limDer=3
return misterio(“seres”, 2, 2)
C=“seres” limIzq=2 limDer=2
return misterio(“seres”, 3, 1)
C=“seres” limIzq=3 limDer=1
return true;
25
Ejercicio:
26
Ejemplo: Serie de Fibonacci
Valores: 0, 1, 1, 2, 3, 5, 8...
Cada término de la serie suma los 2 anteriores. Fórmula recursiva
fib(n) = fib (n - 1) + fib (n - 2)
Caso base: Fib (0)=0;
Fib (1)=1
Caso recursivo: |Fib (i) = Fib (i -1) + Fib(i -2)
public static int fib(int n){
if (n <= 1) return n; //condición base
else
return fib(n-1)+fib(n-2); //condición recursiva
}
27
Ejemplo: Serie de Fibonacci
Traza del cálculo recursivo
Fib(3)
return 1 return 0
28
Trampas sutiles: Código
ineficiente.
29
Serie fibonacci
Iteración vs recursión
30
Ejercicio
●Escribir el método correspondiente a la siguiente
función:
Función de Ackerman
31
El siguiente es el modelo matemático de la función de Ackerman.
En el método que construyas, señala los elementos de la recursividad.
32
Potencia de un número
potencia(n, exponente) =
1, si exponente = 0
n * potencia(n, exponente - 1)
En cualquier otro caso.
33
Numero exponente
1 si exponente = 0
34
“Dividir para vencer”
35
“Dividir para vencer”
36
Ejemplo: Encontrar el número mayor de un
arreglo de enteros:
37
Un ejercicio más...
Diseñar e implementar en un
programa el Algoritmo de Euclides
para calcular el máximo común
divisor (mcd) de dos enteros
positivos.
¿Qué es el mcd?
38
Un ejercicio más...
El mcd es el valor mayor que permite
dividir a los dos valores originales sin
que quede ningún resto (o residuo).
39
Un ejercicio más...
Definimos la función:
mcd(n1, n2) = n2, si n2 <= n1 y
n1 % n2 = 0
mcd(n1, n2) = mcd(n2, n1), si n1
< n2
en los otros casos:
mcd(n1, n2) = mcd(n2, n1%n2)
40
Un ejercicio más...
41
Autoevaluación recursiva OO
Identifica en el siguiente método los elementos de la recursividad:
42
43
Referencias
https://www.utm.mx/~dtorres/cursos/estructuradedatos/tema3Recursi
vidad.pdf
44