Sunteți pe pagina 1din 9

ndice

ndice____________________________________________________________1
Introduccin______________________________________________________2
Desarrollo________________________________________________________3
Conclusin:_______________________________________________________7
Bibliografa:_______________________________________________________8

Introduccin
En el presente trabajo se presenta una investigacin acerca del tema de
recursividad. Qu es?, para qu sirve?, es, y muchas dudas ms se resuelven
en este trabajo.
Veremos tambin los casos en los que se darn, as como en los casos en los que
los que no es conveniente usarlos.
Aqu se explicara eso y ms, as como tambin se mostraran algunos ejemplos,
tanto algortmicos como en la vida diaria, adems de poner ejemplo para la rpida
comprensin.
As mismo, gracias al trabajo de varios autores del libro, se resuelven dos
ejercicios, los cuales estn presentes en el trabajo, que son los ms
representativos de este tema, como lo son las torres de Hani y la secuencia de
Fibonacci, ya que en este tipo de algoritmo s presenta de mayor manera la
recursividad.

Desarrollo
1. Qu es la recursividad?
Capacidad que tiene los mtodos de invocarse a s mismos, esta es una potente
herramienta en la informtica.
Con esta herramienta muchos algoritmos pueden simplificarse significativamente.
2. En qu consiste?
Se utiliza como una alternativa a la repeticin o estructura repetitiva.
El uso de la recursin es particularmente idneo para la solucin de problemas
que pueden definirse de modo natural en trminos recursivos.
3. Ejemplos de recursividad en la vida diaria:
*una fotografa donde se observa otra fotografa
*en los programas de televisin, en los cuales un periodista transfiere el control de
la noticia a otro periodista que se encuentra en otra ciudad, y este a su vez, hace
lo mismo con un tercero. Cuando este ltimo termina su participacin regresa el
control al segundo, y cuando ste tambin finaliza su intervencin regresa el
control al primero.
4. Qu es un objeto recursivo?
Un objeto es recursivo si forma parte de s mismo o interviene en su propia
definicin. El instrumento necesario para expresar los programas recursivamente
es el subprograma. La mayora de los lenguajes de programacin admiten un
procedimiento o funcin que haga referencia a s mismo dentro de su definicin, lo
cual es recursividad directa. Tambin es posible que un procedimiento o funcin
haga referencia otro el cual contenga, a su vez, una referencia directa o indirecta
al primero, esto es recursividad indirecta.
5. Qu es un algoritmo recursivo?
Es un algoritmo que expresa la solucin de un problema en trminos de una
llamada a s mismo.
Cules son sus caractersticas?
Un algoritmo recursivo consta de una parte recursiva, otra iterativa o no recursiva
y una condicin de terminacin. La parte recursiva y la condicin de terminacin
siempre existen. En cambio la parte no recursiva puede coincidir con la condicin
de terminacin. Algo muy importante a tener en cuenta cuando usemos la
recursividad es que es necesario asegurarnos que llega un momento en que no
hacemos ms llamadas recursivas. Si no se cumple esta condicin el programa no
parar nunca.
6. Ventajas y desventajas

La principal ventaja es la simplicidad de comprensin y su gran potencia,


favoreciendo la resolucin de problemas de manera natural, sencilla y elegante; y
facilidad para comprobar y convencerse de que la solucin del problema es
correcta. El principal inconveniente es la ineficiencia tanto en tiempo como en
memoria, dado que para permitir su uso es necesario transformar el programa
recursivo en otro iterativo, que utiliza bucles y pilas para almacenar las variables.
7. Por qu es importante la recursividad en la programacin?

8. 2 maneras en las que se puede presentar la recursividad


Directa: el programa o subprograma se llama a s mismo. Por ejemplo, en la figura
representa un programa y en alguna parte de el aparece una llamada a s mismo.

Indirecta: el subprograma llama a otro subprograma, y ste, en algn momento


llama nuevamente al primero.por ejemplo en la figura el subprograma P llama al
subprograma Q y ste, a su vez, incoca al primero, es decir el control regresa a P

9. Cuando no es conveniente usar la recursividad


*cuando los mtodos usen arreglos largos
*cuando el mtodo cambia de manera impredecible de campos.
*cuando las iteraciones son la mejor opcin
10. Anlisis de algoritmos recursivos:
Serie Fibonacci
4

La sucesin de Fibonacci viene dada por

Como vemos es muy similar al ejemplo del clculo de la factorial. El obtener una
solucin no debiera ser ningn problema para el lector
int Fibonacci (int n)
{
if (n<2)
return 1;
else
return Fibonacci(n-1)+Fibonacci(n-2);
}
El inters en esta funcin no es tanto la dificultad de implementarla sino la
discusin sobre la conveniencia de una implementacin recursiva. Como
indicbamos anteriormente, era importante tener cuidado de no resolver varias
veces el mismo subproblema. En este caso podemos observar que para cada n
hay que calcular F(n-1) y en segundo lugar F(n-2) que ya est incluido en el
primero ya que si n 1 > 1
F(n 1) = F(n 2) + F(n 3)
Por tanto el resultado ser mucho ms ineficiente al estar duplicando trabajo.
Torre de Hani
El problema de las torres de Hani consiste en que inicialmente tenemos un
conjunto de tres torres. La primera de ellas tiene apiladas n fichas de mayor a
menor tamao. El problema es pasar la n fichas de la primera a la tercera torre
teniendo en cuenta que:
1. En cada paso solo se puede mover una ficha.
2. Una ficha de un tamao no puede apilarse sobre otra de menor tamao. La
situacin inicial en el caso de tener 4 fichas se muestra en la figura 4. El problema
consiste en pasar las fichas de la torre 1 a la torre 3 teniendo en cuenta las dos
restricciones anteriores.

Inicialmente el problema no parece trivial pues no es sencillo proponer un


algoritmo iterativo que resuelva el problema. Ahora bien, si descomponemos el
problema para que su solucin se establezca en trminos de la solucin de un
subproblema la situacin es mucho ms simple. La idea recursiva que debemos
considerar es que el problema de pasar 4 fichas de la torre 1 a la torre 3 se puede
descomponer en pasar 3 fichas de la torre 1 a la torre 2, pasar la ficha ms grande
de la 1 a la 3 y despus volver a pasar las 3 fichas de la torre 2 a la torre 3. Como
vemos, para resolver el problema de tamao 4 hemos de resolver dos
subproblemas de tamao 3. En primer lugar tenemos que disear la cabecera de
la funcin. Obviamente no basta con pasar como parmetro el nmero de fichas
sino que adems tendremos que especificar la torre inicial y final pues estos
valores son diferentes en las llamadas a subproblemas. Por tanto la funcin tendr
la siguiente cabecera: void Hanoi (int m, int i, int j) que como vemos refleja los
parmetros que queremos introducir y es vlida para expresar una llamada a un
subproblema (slo tendremos que cambiar el nmero de fichas a uno menos y los
nmero de las torres para usar la torre adicional). Es decir, vamos a disear una
funcin Hanoi que tome como parmetros un entero (m que indica el nmero de
fichas a pasar y dos enteros que indiquen la torre inicial y final (i, j). Como
resultado la funcin escribir en la salida estndar una lnea por cada movimiento
indicando la torre inicial y final de la que parte y a la que llega la ficha
respectivamente. En segundo lugar, es necesario determinar cules sern los
casos base y casos generales. El caso base corresponde a un valor del nmero
de fichas a pasar que sea bajo y por tanto sea un problema con fcil solucin sin
necesidad de hacer uso de la recursividad. Un buen ejemplo es hacer que el caso
base corresponda al problema de traspasar una sola ficha de la torre i a la torre j.
En este caso, la solucin es muy sencilla pues slo es necesario escribir un
mensaje diciendo que el movimiento es pasar la ficha de la torre i a la torre j. El
caso general corresponder a tener ms de una ficha. En este caso tenemos que
resolver dos subproblemas de tamao m-1. Insistamos de nuevo en la idea de que
al programar no debemos de pensar en el funcionamiento interno de las llamadas
recursivas sino que debemos de asumir que las llamadas funcionan. Para ello,
recurramos a suponer que existe una funcin Resuelto (int m, int i, int j) que
escribe en la salida estndar todos los pasos que hay que dar para pasar m fichas
de la torre i a la torre j. Recordemos que el caso general consiste en escribir todos
los pasos para llevar m-1 fichas de la torre i a la torre intermedia, pasar una ficha
de la torre i a la torre j y escribir todos los pasos para llevar m-1 fichas de la torre
intermedia a la torre j. La primera parte la resuelve la funcin Resuelto, la segunda
es slo escribir una lnea con ese movimiento y que la tercera tambin la resuelve
la funcin Resuelto. Ntese como la mayor dificultad del problema ya est resuelta
en esta funcin ficticia que luego no ser a ms que una llamada recursiva.

Conclusin:
Se puede decir que la recursividad es una tcnica de programacin bastante til y
muy interesante de estudiar. A travs de los ejemplos que el individuo pueda
realizar, a prendera a travs y sencillez de lo que es programar recursivamente e
incluir esta tcnica cuando se le presente un problema como los que fueron
mencionados anteriormente. La asignacin de memoria sea esttica o dinmica,
en realidad se tendr que aplicar en cualquier programa en momento de su
codificacin; tomando en cuenta que cada programador tiene su propio estilo de
programar.
El ejemplo de las torres de Hani, como el de las 8 reinas son problemas claves
que tienen que ver directamente que tienen que v ir con lo que es la recursividad

Bibliografa:
Aho, Alfred, Hopcroft John, Estructura de datos y algoritmos, Addison-Wesley
Iberoamericana
Joyanes Aguilar, Luis. Fundamentos de programacin, McGraw-Hill
Cairo,Guardati, Estructuras de datos, McGraw-Hill

S-ar putea să vă placă și