P. 1
Unidad 2 Recursividad

Unidad 2 Recursividad

|Views: 3|Likes:
Publicado porLuis Martinez R

More info:

Published by: Luis Martinez R on Aug 26, 2013
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

08/15/2015

pdf

text

original

ESTRUCTURAS DE DATOS

UNIDAD 2 RECURSIVIDAD
Un proceso es recursivo, si está definido total o parcialmente en términos de sí mismo. La utilización 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 recursión es una alternativa a la iteración. Un proceso iterativo es aquel que requiere de la expresión explicita de cierta acción. De esta forma para calcular por ejemplo, el factorial de un número, se puede utilizar un proceso iterativo o uno recursivo.
PROCED I MI EN TOS RECUR S I V OS

Los tipos de procesos recursivos son los siguientes: a) Recursividad Simple o directa: Es aquella en cuya definición solo aparece una llamada recursiva. Se puede transformar con facilidad en algoritmo iterativo. b) Recursividad Múltiple: Se da cuando hay más de una llamada dentro del cuerpo de una función o método, resulta un poco más difícil 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 función o método provoca una llamada así mismo de forma indirecta a través de otras funciones o métodos. Por ejemplo: int par (int nump) { if(nump==0)return 1; return (impar(nump-1)); }

1

El caso base es: Si N=0. b) El caso general: Es el que relaciona el resultado del algoritmo con resultados de casos más simples. return(par(numi-1)). 4!=4*3*2*1. N!=N*(N-1)! La mecánica de la recursividad está basada en una pila. Evita la continuación indefinida de las partes recursivas. 2!=2*1. 3!=3*2*1. N!=1. 3!=3*2!. 2!=2*1!. 1!=1. } M ECAN I CA D E RECURS I O N Un algoritmo recursivo se debe distinguir por dos elementos: a) El caso base. 1!=1*0!. Por ejemplo la definición de la factorial es recursiva.ESTRUCTURAS DE DATOS int impar (int numi) { if(numi==0)return 0. 4!=4*3!. y se define así: El factorial de 4 es: 4*3*2*1 El factorial de 0 es: 1 Matemáticamente tenemos: 0!=1. Se hacen nuevas llamadas a la función o método pero están más próximas al caso base. Cuando un método recursivo se está ejecutando se crea en la memoria de la computadora una pila en donde se almacenan los 2 . trivial o de fin de recursión: Es un caso donde el problema puede resolverse sin tener que hacer uso de una nueva llamada así mismo. El caso general es: Si N>0. Por lo que se tiene que: 0!=1.

cada llamada recursiva representa el caso general. De tal forma que la pila de recursión está formada por estos registros de activación. VENTAJAS Y DESVENTAJAS DE LA RECURSIVIDAD 1. 2. else return n*fact(n-1). 3. múltiple. El instrumento necesario para expresar la recursividad es el método o función.ESTRUCTURAS DE DATOS valores de los parámetros y de las variables locales del método. si este método retorna un resultado este también se guarda en la pila. d) Cada llamada recursiva se debe aproximar al cumplimiento de las condiciones de salida. Para cada llamada del método se almacenan en la pila los nuevos valores creándose un nuevo ¨registro de activación¨. Presenta una facilidad para comprobar y verificar que la solución es correcta. e) Cada vez que se llama al método los valores de los parámetros y variables locales serán almacenados en una pila. parámetros y variables tomaran nuevos valores con los que trabajará el método. En general las soluciones recursivas son más ineficientes en tiempo y en espacio que las versiones iterativas. y a la duplicación de variables por lo que la complejidad de los algoritmos recursivos tiende a ser muy alta. se retorna al nivel anterior recuperándose de la pila los valores tanto de parámetros como de variables locales continuando la ejecución con la instrucción siguiente a la llamada recursiva. } N IV E L D E R E C U RS ION 0 1 2 3 4 PROC E S O D E ID A FA CT ( 4) 4 *FA CT ( 3) 3 *FA CT ( 2) 2 *FA CT ( 1) 1 *FA CT ( 0) FA CT ( 0) PROC E S O D E V U E L TA 24 4 *6 3 *2 2 *1 1 *1 1 RECURSIVIDAD EN EL DISEÑO En el diseño un algoritmo recursivo se debe de tener en cuenta lo siguiente: a) b) c) La recursividad puede ser de cualquier tipo simple. anidada o cruzada. Un método recursivo debe de disponer de una o varias instrucciones selectivas donde se establezca la condición o condiciones de salida. f) Durante las ejecuciones. que representa el caso base. sencilla. El código o método recursivo para el factorial es: public int fact(int n) { if (n==0) return 1. a la creación de variables dinámicas en la pila. Da solución a problemas de una manera natural. esto es debido a las llamadas continuas a métodos. comprensible y elegante. 3 . g) Cuando termina de ejecutarse el método.

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->