You are on page 1of 3

ESTRUCTURAS DE DATOS

1

UNIDAD 2 RECURSIVIDAD
Un proceso es recursivo, si est definido total o parcialmente en trminos de s mismo. La
utilizacin de la recursividad es apropiada cuando el problema a resolver o los datos a tratar
han sido definidos de forma recursiva, aunque esto no garantiza que esta sea la mejor forma
de resolverlo.
La recursin es una alternativa a la iteracin. Un proceso iterativo es aquel que requiere de la
expresin explicita de cierta accin.
De esta forma para calcular por ejemplo, el factorial de un nmero, se puede utilizar un
proceso iterativo o uno recursivo.
PROCEDIMIENTOS RECURSIVOS
Los tipos de procesos recursivos son los siguientes:
a) Recursividad Simple o directa: Es aquella en cuya definicin solo aparece una llamada
recursiva. Se puede transformar con facilidad en algoritmo iterativo.
b) Recursividad Mltiple: Se da cuando hay ms de una llamada dentro del cuerpo de una
funcin o mtodo, resulta un poco ms difcil transformar a un algoritmo en iterativo.
Por ejemplo:
int cuenta(int m)
{
if (m==1) return 1;
return (cuenta(m-10)+cuenta(m-2));
}
c) Recursividad Anidada: Es aquella en donde en alguno de los argumentos de la llamada
recursiva hay una nueva llamada as misma. Por ejemplo :
public int ack (int n, int m)
{
if(n==0) return(m+1)
else if(m==0)return(ack(n-1,1));
return(ack(n-1,ack(n,m-1)));
}
d) Recursividad Cruzada o indirecta: Son algoritmos donde una funcin o mtodo
provoca una llamada as mismo de forma indirecta a travs de otras funciones o
mtodos. Por ejemplo:
int par (int nump)
{
if(nump==0)return 1;
return (impar(nump-1));
}


ESTRUCTURAS DE DATOS
2

int impar (int numi)
{
if(numi==0)return 0;
return(par(numi-1));
}

MECANICA DE RECURSION

Un algoritmo recursivo se debe distinguir por dos elementos:
a) El caso base, trivial o de fin de recursin: Es un caso donde el problema puede
resolverse sin tener que hacer uso de una nueva llamada as mismo. Evita la
continuacin indefinida de las partes recursivas.
b) El caso general: Es el que relaciona el resultado del algoritmo con resultados de casos
ms simples. Se hacen nuevas llamadas a la funcin o mtodo pero estn ms
prximas al caso base.
Por ejemplo la definicin de la factorial es recursiva, y se define as:
El factorial de 4 es: 4*3*2*1
El factorial de 0 es: 1
Matemticamente tenemos:
0!=1;
1!=1;
2!=2*1;
3!=3*2*1;
4!=4*3*2*1;
Por lo que se tiene que:
0!=1;
1!=1*0!;
2!=2*1!;
3!=3*2!;
4!=4*3!;
El caso base es: Si N=0, N!=1.
El caso general es: Si N>0, N!=N*(N-1)!
La mecnica de la recursividad est basada en una pila. Cuando un mtodo recursivo se est
ejecutando se crea en la memoria de la computadora una pila en donde se almacenan los
ESTRUCTURAS DE DATOS
3

valores de los parmetros y de las variables locales del mtodo, si este mtodo retorna un
resultado este tambin se guarda en la pila.
Para cada llamada del mtodo se almacenan en la pila los nuevos valores crendose un nuevo
registro de activacin. De tal forma que la pila de recursin est formada por estos registros
de activacin.
El cdigo o mtodo recursivo para el factorial es:
public int fact(int n)
{ if (n==0) return 1;
else return n*fact(n-1);
}
NIVEL DE RECURSION PROCESO DE IDA PROCESO DE VUELTA
0 FACT( 4) 24
1 4*FACT( 3) 4*6
2 3*FACT( 2) 3*2
3 2*FACT( 1) 2*1
4 1*FACT( 0) 1*1
FACT( 0) 1

RECURSIVIDAD EN EL DISEO
En el diseo un algoritmo recursivo se debe de tener en cuenta lo siguiente:
a) La recursividad puede ser de cualquier tipo simple, mltiple, anidada o cruzada.
b) El instrumento necesario para expresar la recursividad es el mtodo o funcin.
c) Un mtodo recursivo debe de disponer de una o varias instrucciones selectivas donde se
establezca la condicin o condiciones de salida, que representa el caso base.
d) Cada llamada recursiva se debe aproximar al cumplimiento de las condiciones de salida,
cada llamada recursiva representa el caso general.
e) Cada vez que se llama al mtodo los valores de los parmetros y variables locales sern
almacenados en una pila.
f) Durante las ejecuciones, parmetros y variables tomaran nuevos valores con los que
trabajar el mtodo.
g) Cuando termina de ejecutarse el mtodo, se retorna al nivel anterior recuperndose de la
pila los valores tanto de parmetros como de variables locales continuando la ejecucin
con la instruccin siguiente a la llamada recursiva.
VENTAJAS Y DESVENTAJAS DE LA RECURSIVIDAD
1. Da solucin a problemas de una manera natural, sencilla, comprensible y elegante.
2. Presenta una facilidad para comprobar y verificar que la solucin es correcta.
3. En general las soluciones recursivas son ms ineficientes en tiempo y en espacio que
las versiones iterativas, esto es debido a las llamadas continuas a mtodos, a la
creacin de variables dinmicas en la pila, y a la duplicacin de variables por lo que la
complejidad de los algoritmos recursivos tiende a ser muy alta.

You might also like