Sei sulla pagina 1di 22

RECURSIVIDAD

ESTRUCTURAS DE DATOS 2006

Prof. Ing. M.Sc. Fulbia Torres

UNIDAD II ESTRUCTURAS DE DATOS RECURSIVIDAD


Definicin. Estado base. Estado general. Ejemplos. Ejercicios.

Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

RECURSIVIDAD
DEFINICIN

Es una tcnica de programacin muy potente que permite definir un objeto (problemas, estructuras de datos) en trminos de si mismo.

Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

RECURSIVIDAD
DEFINICIN Ejemplo: Un subprograma que se llame a si mismo se dice que es recursivo. En estos se dan de dos maneras: DIRECTO: El subprograma se llama directamente a si mismo.
Subprograma P
Instruccin 1 Instruccin 2 Instruccin 3 Llamada a P

Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

RECURSIVIDAD
DEFINICIN INDIRECTA: El subprograma llama a otro subprograma y ste a su vez llama al primero.

Subprograma P
Llamada a Q

Subprograma Q
Llamada a V

Subprograma V
Se ejecuta termina

Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

En toda definicin recursiva de un problema se debe establecer lo siguiente:

Estado Base: un estado en el cual la solucin no se presenta de manera recursiva sino directamente. Adems la entrada (datos) del problema debe ir acercndose al estado bsico. Este estado se denomina salida de la recursin, y es necesario que exista por lo menos una dentro de cada rutina recursiva, para garantizar que el proceso termina. Estado General: llamada recursiva, y tambin es necesaria la presencia de al menos uno de stos en toda rutina recursiva.

Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

RECURSIVIDAD
Metodologa de desarrollo Buscar las salidas de la recursin: en que casos o bajo qu circustancias se puede dar una respuesta inmediata al problema planteado. Determinar los avances de la recursin: en que casos se debe plantear la respuesta en trminos de una llamada recursiva. Para esto es conveniente: Identificar los casos posibles, Definir que significa un problema con la misma estructura pero menor tamao y plantear la llamada recursiva, y Explicar en cada caso la manera de construir la respuesta a partir del retorno de dicha llamada. Escribir el algoritmo que implementa el planteamiento antes logrado.
Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

RECURSIVIDAD
EJEMPLO

El factorial de un nmero entero positivo n se define como el producto de los nmeros comprendidos entre 1 y n, la expresin n! simboliza el factorial de n. Escribir una funcin recursiva para encontrar el factorial de un nmero n. Hacer el anlisis y el planteamiento del problema.

Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

RECURSIVIDAD
EJEMPLO

0! = 1 1! = 1 2! = 2 * 1 31 = 3 * 2 * 1 4! = 4 * 3 * 2 * 1 . . n! = n(n 1)!

4! = 4(4 1) = 4 * 3! 3! = 3(3 1) = 3 * 2! 2! = 2(2 1) = 2 * 1! 1! = 1 llamadas recursivas 2! = 2 * 1! = 2 * 1 = 2 3! = 3 * 2! = 3 * 2 = 6 4! = 4 * 3! = 4 * 6 = 24

Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

RECURSIVIDAD
EJEMPLO

Anlisis: Entradas: entero n. Salidas: factorial de n. Planteamiento: 1 Fact (n) n * Fact(n 1) si n > 1 Estado General si n=0 o n=1 Estado Base

Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

RECURSIVIDAD
EJEMPLO

int Fact ( int n ) { If (n == 0 || n == 1) return 1; else return (n * Fact(n 1)); }

Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

RECURSIVIDAD
EJEMPLO Grficamente: Fact (4) = 24 4 * Fact(3) = 24 6 3 * Fact(2) = 6 2 2 * Fact(1) = 2 1 1 * Fact (0) = 1 1 1 4*6 3*2 2*1 1*1
Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

RECURSIVIDAD
EJEMPLO

Escribir una funcin recursiva para encontrar la suma de los enteros pares hasta N. Suma pares = 2+4+..+(N-2)+N. Hacer el anlisis y el planteamiento del problema.

Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

RECURSIVIDAD
EJEMPLO Anlisis: Entradas: entero par N. Salidas: suma de los enteros pares hasta N. Planteamiento: 2 + 4 + 6 + 8 +......+(N - 2) + N
N si N=2 Estado Base

Sumapares(N)
N + sumapares(N-2) si N > 2 Estado General
Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

RECURSIVIDAD
EJEMPLO

int sumapares ( int N ) { If (N == 2) return (N); else if (N > 2) if (N % 2 == 0) return (N + asumapares(N-2)); else exit (1); }

Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

RECURSIVIDAD
EJEMPLO

Corrida grfica: N=8 sumapares(8) = 8 + sumapares(6) sumapares(6) = 6 + sumapares(4) sumapares(4) = 4 + sumapares(2) sumapares(2) = 2

Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

RECURSIVIDAD
EJEMPLO

Escribir una funcin recursiva para calcular cuantas combinaciones de tamao Miembros pueden hacerse del tamao total Grupo C: nmero total de combinaciones Grupo: tamao total del grupo del que elegir Miembros: tamao de cada subgrupo Grupo>=Miembros Hacer el anlisis y el planteamiento del problema.

Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

RECURSIVIDAD
EJEMPLO Anlisis: Entradas: Grupo, Miembros. Salidas: Combinaciones. Planteamiento:
Grupo si Miembros==1 ESTADO BASE

C(Grupo,Miembros)
.

1 si Miembros==Grupo C(Grupo-1,Miembros-1)+C(Grupo-1,Miembros) si Grupo>Miembros>1 ESTADO GENERAL


Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

RECURSIVIDAD
EJEMPLO
ALGORITMO EN Comb(EN Grupo, Miembros) VAR EN cmb INICIO SI Miembros == 1 ENTONCES cmb = Grupo (*Caso Base 1*) SINO SI Miembros == Grupo ENTONCES cmb = 1 (*Caso Base 2*) SINO (*Caso General*) cmb = Comb(Grupo-1,Miembros-1) + Comb(Grupo-1,Miembros) DEVOLVER cmb FIN. Llamada : Escribir(Nmero de combinaciones=, Comb(20,5))
Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

RECURSIVIDAD
EJEMPLO int Comb(int Grupo, Miembros) { int cmb; If (Miembros == 1) cmb = Grupo (*Caso Base 1*) else if (Miembros == Grupo) cmb = 1 (*Caso Base 2*) else (*Caso General*) cmb = Comb(Grupo-1,Miembros-1) + Comb(Grupo-1,Miembros) return (cmb); }
Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

RECURSIVIDAD
EJEMPLO
Seguimiento Comb(4,3) Comb(4,3) Comb(3,2) + Comb(3,3) 1

Comb(2,1)

Comb(2,2)

=4
Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

GRACIAS POR SU ATENCIN HASTA LA PRXIMA CLASE

Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

Potrebbero piacerti anche