You are on page 1of 9

Instituto Tecnolgico de Ciudad Jurez.

Materia: Estructura de Datos

Proyecto: Recursividad.

Nombre del profesor: Ivn Martnez Mendoza.

Nombre de los integrantes del equipo:

*Alonso Astrain Crdenas.

*Kevin Christian Vargas Romero.

Fecha de entrega: 7 de Septiembre del 2015.

1
Introduccin.

La recursividad la podemos definir de una manera ms breve como una tcnica de


programacin que nos da la oportunidad de que un determinado bloque de
instrucciones se pueda repetir un determinado nmero de veces, esto ltimo
depende del usuario o programador ya que se manejar en base a su beneficio.

En el caso de Java que es dnde utilizamos la recursividad en el curso actual, y


aparte de esto mismo , fue la elaboracin del proyecto como tal, se da a partir de
que los mtodos puedan autorealizarse una llamada as mismos y es aqu cuando
decimos que el mtodo es un mtodo recursivo.

La recursividad en s es algo muy abstracto, ya que no es tan sencillo definirlo y


conlleva varios procesos, en su mayora simultneos, sin embargo con la puesta
en prctica de diversos ejercicios se puede determinar en criterio personal lo que
es la misma ya siendo ejecutada.

Para finalizar con la breve introduccin a lo que es la recursividad, tenemos lo que


es la recursividad directa e indirecta las cuales fueron vistas en clase, y se
explican de manera breve a continuacin:

Recursividad Directa:

Consiste en que un mtodo realice ms de una llamada as mismo, y esto sea


logrado a partir de uno o varios puntos del cdigo, por lo general en ambos
trminos se emplean distintos ciclos, y es una llamada que lleva directamente sin
pasar por otra regin.

Recursividad Indirecta:

Aqu es distinto, ya que se hacen llamadas distintas a diversos mtodos, pero que
de una forma u otra llena conexin y stas mismas permiten llegar al punto inicial,
por la misma conexin que est establecida.

Programa recursivo.

2
A continuacin se presenta el cdigo recursivo y el desarrollo del mismo como tal,
el cul fue empleado para la realizacin del proyecto de las Torres de Hanoi.

La primer cita corresponde al cdigo creado por el equipo, que es la clase dnde
se encuentra el mtodo principal.

package torre.de.hanoi;

/**

* @author Kevin_Vargas

*/

public class Mtodo {

public int numeroDeAros, torreInicio , torreIntermedia, torreFinal;

public void Mtodo(int numeroDeAros, int torreInicio, int torreIntermedia, int


torreFinal) {

if(numeroDeAros==1)

System.out.println("El aro est en la torre "+torreInicio+" Y su recorrido debe


establecerlo a la a la torre "+torreFinal);

else{

3
Mtodo(numeroDeAros-1, torreInicio, torreFinal, torreIntermedia);

System.out.println("El aro est en la torre "+torreInicio+" Y su recorrido debe


establecerlo a la torre "+torreFinal);

Mtodo(numeroDeAros-1, torreIntermedia, torreInicio, torreFinal);

Comentarios del cdigo: (Nota; los comentarios que se presentan aqu,


fueron previamente anexados al cdigo).

Comenzamos a declarar nuestras variables, en ste caso tenemos 4 ya que


poseemos los discos o aros como lo denominamos, y las tres torres dnde se van
a estar haciendo los cambios de movimientos.

Se puede denominar que tomamos como separado, lo que es el caso donde


poseemos nicamente 1 aro ,ya que , nicamente se necesita un solo movimiento
que es la instruccin que se muestra dentro del if.

En el Else, es un caso donde existirn ms de 1 disco dentro del juego, al nmero


le estamos restando uno con la finalidad de que en la corrida no se cicle tal como
sucede con las normativas de la recursividad, de igual manera cambiamos la
posicin de las torres ya que se estn efectando distintos movimiento. sto se
hace tomando una secuencia , en la cual en la prctica del juego en comparacin
con el cdigo nos damos cuenta de que nuestra anterior torre fin, ser ahora la

4
posicin intermedia y viceversa, ya que es dnde se est efectuando el
movimiento.

Hasta ste punto se termina lo que es la explicacin del desarrollo del mtodo que fue utilizado en
el cdigo. Y seguimos con la explicacin de la segunda cita que corresponde al main del mismo,
que es menos complejo ya que slo son llamadas de instrucciones de la clase anterior.

public class TorreDeHanoi {

/**

* @param args the command line arguments

*/

public static void main(String[] args) {

// TODO code application logic here

int numero = 0;

Scanner captura = new Scanner(System.in);

Mtodo hanoi = new Mtodo();

System.out.println("Trabajo de Torres de Hanoi.");

System.out.println("Bienvenido al juego de las torres de Hanoi.");

System.out.println("Por favor ingrese el nmero de aros con los que contar


su juego.");

5
numero = captura.nextInt();

hanoi.Mtodo(numero, 1, 2, 3);

System.out.println("El juego ha finalizado.");

Comentarios del cdigo: (Nota; los comentarios que se presentan aqu,


fueron previamente anexados al cdigo).

Pasando a la parte del main que se encuentra aqu mismo, declaramos una
variable entera del tipo numero ya que en ningn momento podramos usar
medios o nmeros distintos a los enteros, as mismo asignamos un Scanner y
cargamo su respectiva librera, cargamos el mtodo que llevar ciertos valores, el
cual nicamente va a variar en el nmero que es declarado al inicio como se
mencionaba anterirmente, posterior a sto las torres 1 , 2 y 3 estn declaradas ya
dentro de los valores del mtodo que tenamos prviamente, osea que se le
asign un valor predeterminado , de igual forma las torres las podemos manejar
en letras o smbolos segn sea el gusto del usuario que est desarrollando, en
nuestro caso fueron nmero.Finalmente al salir de todo el mtodo se coloca que el
juego ha finalizado.

Caso Base:

Esto escrito anteriormente fue la creacin del cdigo, lo cual no se coment fue el
caso base, sin embargo ah en el mismo cdigo est presente, en el desarrollo del
mismo, encontramos el caso base cuando nuestro nmero de discos es igual a 1,

6
ya que de ah se desarrolla lo dems, puesto que solo existir un movimiento para
ese caso, sin embargo la frmula a partir de ah que surge es la de 2^n -1, a
partir de la cual encontramos que se desprende toda la sucesin de los
movimientos de los mismos.

Caso Recursivo:

Fue el empleo del mtodo que se mostr en la parte superior de ste documento, a partir del cual
se desprende la recursividad , incluyendo as mismo que estaba correctamente construido en su
totalidad, de igual manera se cita nuevamente a continuacin cuando ya se emplea todo el
proceso como tal.Ya que es ah dnde ocurre toda la Magia por as decirlo.

public void Mtodo(int numeroDeAros, int torreInicio, int torreIntermedia, int


torreFinal) {

if(numeroDeAros==1)

System.out.println("El aro est en la torre "+torreInicio+" Y su recorrido debe


establecerlo a la a la torre "+torreFinal);

else{

Mtodo(numeroDeAros-1, torreInicio, torreFinal, torreIntermedia);

System.out.println("El aro est en la torre "+torreInicio+" Y su recorrido debe


establecerlo a la torre "+torreFinal);

Mtodo(numeroDeAros-1, torreIntermedia, torreInicio, torreFinal);

7
}

Ventajas sobre la funcin iterativa.

En ste caso, la recursividad es el mtodo ms viable a la hora de programar,


porque como son distintas llamadas que se realizan , ahorrra muchsimo tiempo
de ejecucin y de lectura del cdigo, si usaramos la iteracin, sera muy
complicado porque podran hacerse hasta miles de lneas de cdigo, esto ltimo si
tomamos en cuenta que el programa no est diseado nicamente para el
acomodamiento de 8 discos, sino para ms si as existieran, sin embargo el
mtodo de 8 discos son 255 movimientos lo cual hace muy complejo esto mismo,
en la iteracin se pierde la sintxis en ste caso, ya que la apariencia no se
muestra de la misma manera, lo cual es algo muy criticado hoy en da con los
diversos programadores. La recursividad en realidad abarca ms recursos por
parte de la mquina, sin embargo es ms natural y acta con ms eficacia, es por
esto mismo que es la mejor opcin para el problema presentado.

Conclusin.

La recursividad representa una gran ventaja en cualquier programa dnde se


ocupen realizar muchas llamadas a un mismo mtodo, que en la actualidad la
mayora del software desarrollado se basa en esto mismo, anexando tambin que
es esencial para un programador tener stos conocimientos bsicos sobre todo
para el momento de ahorra cdigo y que ste mismo funcione de manera correcta.

8
En el caso de la realizacin de la Torre de Hanoi, tuvo mucho utilidad debido a que
si no estuviera la existencia de stos mismos ciclos de llamadas continuas, el
cdigo sera demasiado extenso y a su vez no tendra una sintxis correcta, se
perdera el sentido de la programacin dentro de los mismos renglones de cada
elemento. De igual manera, los problemas lgicos-matemticos intervienen
siempre con un algoritmo, el cual se puede desarrollar de una mejor manera con
ste tipo de herramientas que nos proporciona la programacin.

You might also like