Foros del Web » Programación para mayores de 30 ;) » Java »

AYUDA para entender metodo recursivo

Estas en el tema de AYUDA para entender metodo recursivo en el foro de Java en Foros del Web. hola a todos, llevo tres dias tratando de entender un metodo recursivo, el del juego de las torres de hanoi que es muy comun encontrarla ...
  #1 (permalink)  
Antiguo 16/05/2010, 14:40
Avatar de calichecal  
Fecha de Ingreso: junio-2009
Ubicación: Colombia
Mensajes: 288
Antigüedad: 14 años, 10 meses
Puntos: 12
AYUDA para entender metodo recursivo [SOLUCIONADO]

hola a todos, llevo tres dias tratando de entender un metodo recursivo, el del juego de las torres de hanoi que es muy comun encontrarla para los ejemplos de metodos recursivos(trata de un numero de discos ingresados por teclado con los cuales se muestra por pantalla los movimientos a seguir uno por uno EJm: "Mover disco A a C...", siendo las tres torres:(A, B y C) ), me considero bueno para la logica pero cuando se trata de dos llamados o mas, de un metodo dentro del mismo se me dificulta comprenderlo, agradesco al que me explice el recorrido que hace dicho metodo o me recomiende una buena pagina donde expliquen este tipo de recursividad en profundidad.. grax.. este el codigo:

Código PHP:
public class Recursividad_Torre_De_Hanoi {
    private static 
int movimientos=0;
     public static  
int MovimientosHanoi(int n_discoschar a,char bchar c){
         if(
n_discos >0){
             
MovimientosHanoi(n_discos-1a,c,b);
             
System.out.println("mover disco de "+a+" a "+c);
             
movimientos++;
             
MovimientosHanoi(n_discos-1,b,a,c);
         }
         return 
movimientos;
     }
         
     


    public static 
void main(String[] args){
       
int N_discos,Movimientos;
       
System.out.print("Numero de discos: ");
       
N_discos=Leer.leerint();
       
Movimientos MovimientosHanoi(N_discos,'A','B','C');
       
System.out.print("movientos efectuados: "+Movimientos);
    } 
}
__________________
Hay una fuerza motriz más poderosa que el vapor, la electricidad y la energía atómica: la voluntad. -Einstein-

Última edición por calichecal; 17/05/2010 a las 16:46
  #2 (permalink)  
Antiguo 16/05/2010, 22:05
Avatar de caelus  
Fecha de Ingreso: mayo-2010
Ubicación: /home
Mensajes: 91
Antigüedad: 13 años, 11 meses
Puntos: 5
Respuesta: AYUDA para entender metodo recursivo

Si mal no recuerdo el juego, deberás manejar 2 problemas (siempre es mejor dividir un problema complejo en varios simples)
1.- Un disco solo se puede colocar en un lugar si el disco de abajo es mas grande o no hay disco
2.- Si vas a tener 3 postes deberías tener o bien, 2 métodos (mover derecha y mover izq) o todas las combinaciones posibles (Ej, de A a B, de A a C.. etc son 6 casos posibles)
Yo manejaría los tamaños asignándoles a los discos un número y controlando que el número de arriba no sea mayor que el de abajo.
Por supuesto que imagino que estarás usando clases bien diferenciadas, así podrás escalar la aplicación en algún momento, además los atributos no se mezclarán entre sí.

Sinceramente no entiendo donde está la recursividad (no aplicas un for o algo así) lo que veo es una estructura de control (un if), la estructura de un for sería for (int i=0; i<algo;i++){ cuerpo }

Saludos
  #3 (permalink)  
Antiguo 16/05/2010, 22:23
Avatar de calichecal  
Fecha de Ingreso: junio-2009
Ubicación: Colombia
Mensajes: 288
Antigüedad: 14 años, 10 meses
Puntos: 12
Respuesta: AYUDA para entender metodo recursivo

Cita:
Iniciado por caelus Ver Mensaje
Si mal no recuerdo el juego, deberás manejar 2 problemas (siempre es mejor dividir un problema complejo en varios simples)
1.- Un disco solo se puede colocar en un lugar si el disco de abajo es mas grande o no hay disco
2.- Si vas a tener 3 postes deberías tener o bien, 2 métodos (mover derecha y mover izq) o todas las combinaciones posibles (Ej, de A a B, de A a C.. etc son 6 casos posibles)
Yo manejaría los tamaños asignándoles a los discos un número y controlando que el número de arriba no sea mayor que el de abajo.
Por supuesto que imagino que estarás usando clases bien diferenciadas, así podrás escalar la aplicación en algún momento, además los atributos no se mezclarán entre sí.

Sinceramente no entiendo donde está la recursividad (no aplicas un for o algo así) lo que veo es una estructura de control (un if), la estructura de un for sería for (int i=0; i<algo;i++){ cuerpo }

Saludos
.bueno no se como no ves la recursividad
-el programa no lo hice yo, es de un libro de Javier Ceballos
- y en este libro resaltan el buen ejemplo para mostrar la utilidad de la recursividad
-este tema lo habri con la intension de que alguien me haga el favor de analizar el codigo y me lo explique con palabras que pueda entender
-te refieres al for como algo esencial para la recursividad ¿sabes que es recursividad?
__________________
Hay una fuerza motriz más poderosa que el vapor, la electricidad y la energía atómica: la voluntad. -Einstein-
  #4 (permalink)  
Antiguo 16/05/2010, 23:45
Avatar de caelus  
Fecha de Ingreso: mayo-2010
Ubicación: /home
Mensajes: 91
Antigüedad: 13 años, 11 meses
Puntos: 5
Respuesta: AYUDA para entender metodo recursivo

Ok, no precisas tratarme de tonto para que te de una mano, te aviso por las dudas que el código como lo presentaste no compila en eclipse (no se en otra plataforma) falta cerrar alguna llave y el método leer no está definido.
Solucionado esto, el método es recursivo porque se llama a sí mismo, comenzando por el main pregunta la cantidad de discos que van a ponerse en juego y el método asigna valores A, B y C a los postes y los discos propuestos, luego el método de arriba controla que en los postes B y C no haya discos y cambia la posición de b y c, el procedimiento comienza realmente después; moviendo el primer disco al lugar B desde allí continúa cambiando los lugares hasta pasarlos a todos al poste C y devolviendo los movimientos usados
Esto era lo uqe precisabas?
  #5 (permalink)  
Antiguo 17/05/2010, 01:00
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: AYUDA para entender metodo recursivo

La cuestion es que el problema de mover N discos desde A hasta C se puede reducir a mover N-1 discos desde A hasta B y luego mover esos N-1 discos desde B hasta C, usando siempre el tercer disco como intermediario.

Entonces, para mover N-1 discos desde A hasta B, hay que mover N-2 discos desde A hasta C y luego los N-2 discos desde C hasta B...

etc etc hasta que sólo hay que mover un disco, el cual va directo de una torre a otra (el programa no lo distingue y lo mueve en dos pasos pero no haría falta)

Y así es como funciona, un típico programa recursivo aunque en este caso con dos llamadas. Si se te hace dificil entenderlo de cabeza, lo mejor es usar papel y lapiz para escribir los pasos. No es coña .

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #6 (permalink)  
Antiguo 17/05/2010, 16:45
Avatar de calichecal  
Fecha de Ingreso: junio-2009
Ubicación: Colombia
Mensajes: 288
Antigüedad: 14 años, 10 meses
Puntos: 12
Respuesta: AYUDA para entender metodo recursivo

Cita:
Iniciado por GreenEyed Ver Mensaje
La cuestion es que el problema de mover N discos desde A hasta C se puede reducir a mover N-1 discos desde A hasta B y luego mover esos N-1 discos desde B hasta C, usando siempre el tercer disco como intermediario.

Entonces, para mover N-1 discos desde A hasta B, hay que mover N-2 discos desde A hasta C y luego los N-2 discos desde C hasta B...

etc etc hasta que sólo hay que mover un disco, el cual va directo de una torre a otra (el programa no lo distingue y lo mueve en dos pasos pero no haría falta)

Y así es como funciona, un típico programa recursivo aunque en este caso con dos llamadas. Si se te hace dificil entenderlo de cabeza, lo mejor es usar papel y lapiz para escribir los pasos. No es coña .

S!
bien !! gracias GreenEyed ya pude simplificar y comprender al fin con tu explicacion.
__________________
Hay una fuerza motriz más poderosa que el vapor, la electricidad y la energía atómica: la voluntad. -Einstein-

Etiquetas: entender, metodo, recursivo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:48.