kLCUk5IVIDAD
REC0RSIvIBAB Pgina
CATEDRTICO: ING. ROSEL MUOZ LOPEZ
ESTRUCTURA DE DATOS
INTEGRANTES:
ZURIDIANA ROXETTE MORALES SANTIAGO
RUMUALDA ALCAZAR ALTUZAR
TAPACHULA, CHIAPAS A 12 DE JUlIO DEL 2011.
INSTITUTU TECNULUCICU DE
TAPACHULA
REC0RSIvIBAB Pgina
INTRODUCCION
El mtodo recursivo es un mtodo que se llama as mismo directa o
indirectamente. Existen dos clases de recursividad que son: la recursividad o
recursin directa que es el proceso de por el que un mtodo se llama as mismo
desde el propio cuerpo del mtodo, y la recursividad o recursin indirecta implica
mas d un mtodo. La recursividad indirecta implica que la existencia de dos
mtodos: uno() y dos (). Entonces desde el main () llama a uno (), y a continuacin
uno () llama a dos (). En alguna parte del proceso dos () llama a uno (), una
segunda llamada a uno (). Esta accin es recursin indirecta, por eso es recursiva,
ya que uno () ha sido llamado dos veces, sin retornar nunca a su llamadora.
Los bucles son uno de los pilares fundamentales de la programacin, sin embargo,
es posible construir programas sin utilizarlos.
La recursividad simplemente significa aplicar una funcin como parte de la
definicin de esa misma funcin.
La clave de funcionamiento es que obligatoriamente debe existir una condicin
terminal con el objeto de que la funcin se bifurque hacia una resolucin no
recursiva en algn punto. De lo contrario, la funcin entra en un bucle infinito y
nunca finaliza.
REC0RSIvIBAB Pgina
|(|
1eua,
|
|ec|r|v|dad de-|n|c|on
1|no de rec|r|v|dad en |
coun|e+|dad -
||nc|on
rec|r|va
/|nac|on de ueuor|a e!a!|ca V
d|nu|ca4(
(uo -|nc|onan |o a|or|!uo de rec|r|v|dad
47
|ron|edade de a|or|!uo rec|r|vo
42
(adena rec|r|va o rec|r|v|dad |nd|rec!a
4
|a !or de
|an|47
|ec|r|on \
!erac|on74
|+eun|o de rec|r|v|dad
4 ||enado de |n
arre|o72
7 (a|c||ar n(r
7A
REC0RSIvIBAB Pgina
2 unr|ue 2 vece
|o|a7
A ||uo coun |v|or 7n|uero en!ero no|!|v
7(
||uo coun |v|or 7n|uero en!ero no|!|vo(d|-eren!e
||ca`77
( |aVor de n nuero en!ero no|!|vo
7-
7 |enor de n nuero en!ero
no|!|vo 7
- den!|-|ca | |n n|uero en!ero no|!|vo e nar o
|unar 2(
/
n
24
4( (rdenau|en!o rn|do Q||c|:or!
27
44 :|ua de n ||uero |n!ero
2A
47 (enera e |unr|ue e| a|ecedar|o en uaVc||a
2
RECURSIVIDAD
Un mtodo recursivo es aquel que se llama a s mismo, bien directamente o bien a
travs de otro mtodo.
Recursividad es una tcnica de programacin importante. Se utiliza para realizar
una llamada a una funcin desde la misma funcin. Recursividad y la iteracin
(ejecucin en bucle) estn muy relacionadas, cualquier accin que pueda
realizarse con la recursividad puede realizarse con iteracin y viceversa.
La recursin en los subprogramas puede darse de dos maneras diferentes:
a) Directa: el subprograma se llama directamente a s mismo. Por ejemplo, un
subprograma y en alguna parte de el aparece una llamada a s mismo.
LIamada a P
Subprograma P
REC0RSIvIBAB Pgina
b) Indirecta: el subprograma llama a otro subprograma, y este a su vez llama
al primero. Por ejemplo, el subprograma P llama al subprograma Q y este a
su vez invoca al primero (fig. 1).
Tambin se da la recursin indirecta cuando el subprograma llama a otro y
este a un tercero. Una vez ejecutado, el control regresa al subprograma que
lo llamo; lo mismo sucede en todos sus niveles. Por ejemplo, el
subprograma P que llama al subprograma Q, y este llama al subprograma
V. Cuando V concluye, el control regresa a Q, y al terminar este, el control
se transfiere a P (fig.2)
Es fcil crear una funcin recursiva que no llegue a devolver nunca un resultado
definitivo y no pueda llegar a un punto de finalizacin. Este tipo de recursividad
hace que el sistema ejecute lo que se conoce como bucle "infinito".
Llamada a O
8ubprograma P
8ubprograma O
Llamada a P
8ubprograma P
8ubprograma O
8ubprograma V
Llamada a O
Llamada a V
lla 1
lla 2
REC0RSIvIBAB Pgina
pub||c c|ass kecur|v|dad // se dec|ara |a c|ase
stat|c |nt mtodo(|nt a) // este es un mtodo recurs|vo donde su parmetro a adqu|ere
e| va|or de x
a++ // se |ncrementa |a var|ab|e a
return mtodo(a) // este es e| ||amado a| mtodo as| m|smo donde no t|ene f|n
pub||c stat|c vo|d ma|n(str|ng arg ) // este es e| metodo ma|n donde [ava e[ecuta |os
programas
|nt x // dec|arac|on de una var|ab|e |oca| x de| mtodo ma|n
xIntegerparseInt(ICpt|onaneshowInputD|a|og(nu||"|ntroduaca numero"))
// ped|mos e| va|or de x
metodo(x) // se manda a ||amar a| mtodo stat|co
Los parmetros y variables locales toman nuevos valores en cada llamada (no se
trabaja con los anteriores). Un procedimiento o funcin se dice recursivo si durante
su ejecucin se invoca directa o indirectamente a s mismo. Esta invocacin
depende al menos de una condicin que acta como condicin de corte que
provoca la finalizacin de la recursin.
Un algoritmo recursivo consta de:
1- Al menos un caso trivial o base, es decir, que no vuelva a invocarse y que se
ejecuta cuando se cumple cierta condicin, y
2- el caso general que es el que vuelve a invocar al algoritmo con un caso ms
pequeo del mismo.
pub||c c|ass kecur|v|dad // se dec|ara |a c|ase
stat|c |nt mtodo(|nt a) // este es un mtodo recurs|vo donde su parmetro a adqu|ere
e| va|or de x
If(a0) // este es una sentenc|a de contro| para f|na||zar |a recurs|v|dad
a // se |e resta 1 a| va|or de |a var|ab|e a
// a este se |e denom|na caso base por qu no se vue|ve a |nvocar a|
m|smo mtodo
L|se
REC0RSIvIBAB Pgina 8
return mtodo(a) // este es e| ||amado a| mtodo as| m|smo donde no
t|ene f|n
// 1amb|n se |e denom|na caso GLNLkAL por que se ||ama as| m|smo
pub||c stat|c vo|d ma|n(str|ng arg ) // metodo ma|n donde [ava e[ecuta |os programas
|nt x // dec|arac|on de una var|ab|e |oca| x de| mtodo ma|n
xIntegerparseInt(ICpt|onaneshowInputD|a|og(nu||"|ntroduaca numero"))
// ped|mos e| va|or de x
metodo(x) // se manda a ||amar a| mtodo stat|co
TIPOS DE RECURSIVIDAD SEGN SU COMPLEJIDAD
1. Recursin IineaI: Un mtodo recursivo es lineal, si como mximo tiene una
llamada recursiva por rama del condicional, de manera que la cantidad de
llamadas recursivas puede calcularse como una funcin lineal que
depender de la velocidad con la cual progresa hacia el caso base. sta a
su vez la subdividimos en:
1. Recursin por Ia coIa: es cuando la llamada recursiva se hace al
final del mtodo, no quedan operaciones pendientes sobre los datos,
de manera que no hace falta representar con una pila las variables
de cada llamada, y el mtodo recursivo lo podramos transformar
tranquilamente en un bucle iterativo.
2. Recursin no por Ia coIa: es cuando despus de ejecutar todas las
llamadas recursivas el mtodo debe realizar una operacin
pendiente para completar el proceso.
REC0RSIvIBAB Pgina 9
2. Recursin no IineaI: Un mtodo recursivo es no lineal, si hay ms de una
llamada recursiva por rama del condicional.
1. Recursin en cascada: es cuando en cada rama hay ms de una
llamada a la funcin recursiva, su complejidad en trmino de
llamadas recursivas ser una funcin exponencial de la profundidad
del rbol de las llamadas.
2. Recursin anidada: es cuando alguna llamada recursiva recibe
como parmetro a una llamada recursiva, su complejidad en trmino
de llamadas recursivas resultar mucho ms difcil de calcular.
3. Recursin mutua: se da cuando dos funciones son recurrentes entre s.
FUNCION RECURSIVA
Las funciones recursivas se componen de:
Caso base: una solucin simple para un caso particular (puede
haber ms de un caso base). La secuenciacin, iteracin condicional
y seleccin son estructuras vlidas de control que pueden ser
consideradas como enunciados.
Caso recursivo: una solucin que involucra volver a utilizar la
funcin original, con parmetros que se acercan ms al caso base.
Los pasos que sigue el caso recursivo son los siguientes:
O El procedimiento se llama a s mismo
REC0RSIvIBAB Pgina
O El problema se resuelve, resolviendo el mismo problema pero de
tamao menor
O La manera en la cual el tamao del problema disminuye asegura que
el caso base eventualmente se alcanzar
A5IGNACICN L51A1ICA DINAMICA DL LA MLMCkIA