Escolar Documentos
Profissional Documentos
Cultura Documentos
Estructura de Datos
Ing. De Sistemas
Marco A. Adarme Jaimes
madarme@ufps.edu.co
Marco A. Adarme J.
Marco A. Adarme J.
Recursividad
En forma muy simple, un problema es
recursivo, si su solucin pasa por
autoejecutarse (con otros parmetros).
Marco A. Adarme J.
Marco A. Adarme J.
Recursividad...Ejemplo
Contar a un grupo de
personas...
Solucin NO recursiva...
Los ponemos en fila, y
partiendo del primero,
contamos
secuencialmente
1, 2, 3, 4, 5, 6, ...., n
Solucin recursiva.
Si no hay nadie, entonces
hay 0, sino hay uno +
contar al resto
1 + contar(n-1)
Marco A. Adarme J.
Definir la recursividad
sino, hay uno + contar al resto
+
Marco A. Adarme J.
TCNICA
Marco A. Adarme J.
Marco A. Adarme J.
Marco A. Adarme J.
Por ejemplo:
public static void main(String args[]) {
int digitos=contardigitos(321);
System.out.println(digitos); // Imprime 3
}
Marco A. Adarme J.
int contardigitos(321)
1. Llamada Recursiva
public static int contardigitos(321){
if (321 < 10)
return 1;
return (1 + contardigitos(32));
return(1+
}
2. Llamada Recursiva
public static int contardigitos(32){
if (32 < 10)
return 1;
return (1 + contardigitos(3));
}
Devuelve a donde fu
llamado (3)
2)
Devuelve 2
return(1+1)
Devuelve 1
2. Llamada Recursiva
Public static int contardigitos(3){
if (3 < 10)
return 1; Se sale y se devuelve donde fue llamado
return (1 + contardigitos(??));
}
Marco A. Adarme J.
FUNCIONALIDAD
Invocacin del subalgoritmo a s mismo.
Cada llamada al subalgoritmo se realiza con un
valor de parmetro que hace el problema de menor
tamao.
La llamada al subalgoritmo se realiza siempre en
una sentencia de seleccin.
En dicha sentencia de seleccin, al menos debe de
haber un caso donde se acta de forma diferente
(no recursiva). Este es llamado caso base.
Ocultacin de los detalles de gestin de la memoria
en las llamadas recursivas(Pila Interna)
Marco A. Adarme J.
Marco A. Adarme J.
Marco A. Adarme J.
x==1
2%20
0)
5%21
1)
11%21
+ 1)
22%20
+ 0)
System.out.println( enBinario(22))
r (1)
r (enBinario(2/2 =1) +
r (enBinario(5/2 =2) +
r (enBinario(11/2 =5)
r (enBinario(22/2 =11)
Marco A. Adarme J.
1
r(1+0)
r(1+0 +
1)
r(1+0 + 1
+ 1)
r(1+0 + 1 +
1 + 0)
10110
L.toString1()
1,2,3,4,5
L.toString2()
5,4,3,2,1
Mtodos Decoradores
Recursin en Estructuras de datos
Marco A. Adarme J.
No existe caso
base
Marco A. Adarme J.
Marco A. Adarme J.
v[0]!=8esta(8,v,1)
v[1]!=8esta(8,v,2)
v[2]==8return(true)
Marco A. Adarme J.
Cul es el error?
Marco A. Adarme J.
Marco A. Adarme J.