Ver Mensaje Individual
  #6 (permalink)  
Antiguo 28/05/2013, 20:12
CrashNebula
 
Fecha de Ingreso: mayo-2013
Mensajes: 4
Antigüedad: 11 años
Puntos: 0
Respuesta: [ansi c] torres de hanoi

@Vosk: Como dijo amchacon fue al copiarlo que quedó así. Un error de novato posteando por primera vez en un foro de programación.Gracias de todos modos.

@razpeitia: Gracias por arreglar el código.

Si se fijan podran notar que la función en la linea 23 y la linea 37 tienen los últimos dos parametros intercambiados:

(linea 23) g_TorreDeHanoiRecursivo(int liFilas, int liNDiscos,int liTorreOrigen[kMAX], int liTorreIntermedia[kMAX],int liTorreDestino[kMAX])

(linea 24) g_TorreDeHanoiRecursivo(liFilas, liNDiscos-1,liTorreOrigen, liTorreDestino,liTorreIntermedia);

(linea 42)g_TorreDeHanoiRecursivo(liFilas, liNDiscos-1, liTorreIntermedia, liTorreOrigen, liTorreDestino);

@amchacon: Qué pasa entre el paso 2 y 3? No estoy completamente seguro así que voy a analizar.

En la funcion (linea 23) g_TorreDeHanoiRecursivo con liFilas=3, liNDiscos=3 la función se llama recursivamente tomando liNDiscos-1(linea 37) entonces el liNDiscos que se pasa será igual a 2. La funcion vuelve a llamarse para liNDiscos= 1 y se cumple la condición de la linea 26, se mueve un disco desde el origen hasta el destino y se imprime (paso 1) y termina esa función que fue llamada en la linea 37. En la linea 38 se hace un intercambio de disco y en la 40 se imprime nuevamente (paso2).

Al llamarse la función 2 veces. el orden de los parámetros no se vio afectado ya que si se intercambian las posiciones de dos elementos dos veces quedan en su estado original.
En la llamada de la linea 42 se cambian todos los parámetros de orden y la impresiones ya no quedan en el orden que le corresponde.

Creo que el problema son las impresiones y no la función recursiva porque la función imprime 7 veces y el resultado final está correcto. El numero mínimo de movimientos de la torre de hanoi se calcula como 2ˆn-1. Si n=3 entonces 2ˆn-1=7. Alguna idea de como indicarle a la función imprimir que el orden de los parámetros?