RECURSIVIDAD-Abstraccion

download RECURSIVIDAD-Abstraccion

of 8

Transcript of RECURSIVIDAD-Abstraccion

RECURSIVIDAD La recursividad (recursin) es una tcnica de programacin elemental que permite que una funcin pueda llamarse asimismo desde la misma funcin. Se puede utilizar la recursividad como una alternativa a la iteracin. La recursividad es una herramienta poderosa e importante en la resolucin de problemas en programacin. Una solucin recursiva es normalmente menos eficiente en trminos de tiempo de computadora que una solucin iterativa debido a las operaciones auxiliares que llevan consigo las llamadas suplementarias a las funciones: sin embargo, en muchas circunstancias el uso las de la recursin permite ms a los programadores especificar soluciones naturales, lgicas,

elegantes, sencillas, que seran, en caso contrario difcil de resolver. La recursin permite definir un objeto (problemas, estructuras de datos) en trminos de s mismo. Casos tpicos de estructuras de datos definidas de manera recursiva son los rboles y las listas ligadas. Algunos ejemplos de problemas que se definen recursivamente son el factorial de un nmero, la serie de Fibonacci, etc. Un ejemplo tpico de recursividad sera la funcin factorial. El factorial es una funcin matemtica que se resuelve multiplicando ese nmero por todos los nmeros naturales que hay entre l y 1. Por ejemplo, factorial de 4 es igual a 4 * 3 * 2 * 1. Si nos fijamos, para el ejemplo de factorial de 4 (factorial se expresa matemticamente con un signo de admiracin hacia abajo, como 4!), se puede resolver como 4 * 3! (4 * factorial de 3). Es decir, podemos calcular el factorial de un nmero multiplicando ese nmero por factorial de ese nmero menos 1. n! = n * (n-1)!

En el caso de la funcin factorial, tenemos el caso bsico que factorial de 1 es igual a 1. As que lo podremos utilizar como punto de ruptura de las llamadas recursivas. As pues, vamos a realizar la codificacin de la funcin recursiva factorial. Primero veamos un pseudocdigo: funcion factorial(n) si n=1 entonces factorial = 1 sino factorial = n * factorial(n-1) fin funcion Ahora veamos cmo se implementara esta funcin con el lenguaje de programacin Javascript: function factorial(n){ if(n==1) return 1 else return n * factorial(n-1) } Como se puede ver, la recursividad no representa ninguna dificultad y de hecho es una herramienta muy til para programacin de algoritmos. ALGORITMO RECURSIVO Un algoritmo recursivo es un algoritmo que se define en trminos de s mismo. Son implementados en forma de subrutinas (funciones, procedimientos, subprogramas, etc) de tal forma que dentro de un subrutina recursiva hay una o ms llamadas a s misma.

Algoritmos Recursivos Aplicados en las Ciencias de la Computacin En ciencias de la computacin, la recursividad es un elemento muy importante en la solucin de algunos problemas. Por definicin, un algoritmo recursivo es aquel que utiliza una parte de l mismo como solucin al problema. La otra parte generalmente es la solucin trivial, es decir, aquella cuya solucin ser siempre conocida, es muy fcil de calcular, o es parte de la definicin del problema a resolver. Dicha solucin sirve como referencia y adems permite que el algoritmo tenga una cantidad finita de pasos. La implementacin de estos algoritmos se realiza generalmente en conjunto con una estructura de datos, la pila, en la cual se van almacenando los resultados parciales de cada recursin. QUE ASPECTOS DEBEN TOMARSE EN CUENTA A LA HORA DE ELEGIR ENTRE UN ALGORITMO RECURSIVO Y UNO ITERATIVO? Aspectos que hay que considerar al decidir cmo implementar la solucin a un problema si es de forma iterativa o de forma recursiva: La carga computacional (tiempo de CPU y espacio en memoria) asociada a las llamadas recursivas. La redundancia (algunas soluciones recursivas resuelven un problema en repetidas ocasiones). La complejidad de la solucin (en ocasiones, la solucin iterativa es muy difcil de encontrar). La concisin, legibilidad y elegancia del cdigo resultante de la solucin recursiva del problema. ESTABLEZCA LAS DIFERENCIAS ENTRE RECURSIVIDAD E ITERACIN 1. Ambas realizan una repeticin:

a) b) 2. a)

Solucin iterativa repite el cuerpo del bucle. Solucin recursiva repite las llamadas al mtodo recursivo. Ambas tienen una condicin de terminacin. Solucin iterativa: termina cuando se imcumple la condicin

de continuacin del bucle. b) Solucin recursiva: se termina cuando una llamada alcanza

el caso base (induccin) desencadenando una secuencia de vuelta atrs. Backtracking: sucesin de pruebas tentativas. 3. Ambas se deben disear para converger a la solucin

(principio de convergencia, y que no se salten la condicin de terminacin). a) Solucin iterativa: se llega a cumplir la condicin de

terminacin (esto se debe garantizar). b) base. Toda solucin recursiva puede encontrar una solucin iterativa equivalente, mientras que lo contrario no siempre es cierto Ejemplo: Programa que calcula el factorial de un nmero El cdigo del programa que calcula el factorial es el siguiente: FUNCION RECURSIVA #include #include long factorial(long); Solucin recursiva: se debe garantizar que se llegue al caso

int main(){ int num; coutnum; for(int i=0; i