Las torres de Hanoi C/C++

Las torres de Hanoi es un juego matemático. Consiste en tres varillas verticales y varios discos dispuestos en la primera varilla de mayor a menor. No existen dos discos iguales y contra más hayan más dificil sera la solución, ¿Seguro? pues no por que el programador cutre os ofrece la manera de solucionar este problema; esta entrega sera en C/C++, ello no significa que no se pueda hacer en otros lenguajes.

/*Las torres de Hanoi es el juego de tres torres con unos discos en el que se tienen
*que pasar los discos de una torre a la otra con la condicion de que en ninguna torre puede
*haber un disco pequeño por debajo de uno grande
*las funciones serian:
* Hanoi (1,A,B,C)
* Hanoi (1,A,C,B)
* Hanoi (1,B,C,A)
* Donde el orden seria el de: Hanoi (numero de discos, origen, destino, torre auxiliar)*/

#include <stdio.h>//incluimos esta libreria ya que pediremos por pantalla cuantos discos se usaran.

void hanoi(int,char,char,char);// aqui se ve claramente como estamos inicializando una funcion nueva.

void main()//esta es la funcion principal, se pone void por que al ser una funcion unica tampoco no nos interesa que devuelva nada. Dentro de la funcion no recojemos nada por que de momento a los main no le pasaremos nada.
{
int num;//Declaramos un variable entera.
char A='A',B='B',C='C';//Declaramos tres variables de tipo caracter para indicar la torre en la que estamos.

printf ("Introduzca el numero de discos que utilizara: ");//Esto es lo que se visualizara por pantalla, tened en cuenta que si poneis algun tipo de escape tendria que estar fuera de las comillas.
scanf ("%d",&num);//Con %d le indicamos que lo que recogeremos sera un decimal y con &num que se pasara a la variable num.

hanoi (num,A,C,B);//Con esto realizamos la llamada a la función inicializada con anterioridad.

printf ("\n\n\n");//Se imprimiran tres saltos de linea cuando se acabe la anterior función.
}

/**En esta funcion viene la parte importante de este programa**/

void hanoi (int num,char org,char des,char aux)// Aqui se esta inicializando la función y sus variables.
{
if (num==1) //en caso de que num sea 1 se hara el ultimo printf dando por finalizado esta funcion.
printf("\n%c-->%c",org,des);//Esto nos printara en el dispositivo estandar el ultimo movimiento.
else//en caso contrario se ejecutaran tres veces seguidas las funciones
{
hanoi (num-1,org,aux,des);
hanoi (1,org,des,aux);
hanoi (num-1,aux,des,org);
}//Teneis que recordad que esto esta pensado en recursiva por lo tanto asta que num no sea 1 se seguiran concatenando las fuciones para despues volver hacia atras.
}

Bueno una vez ejecuteis este programa podreis ver cual es el resultado y una vez lo hayais visto pensad en la leyenda detras de este problema.

Cuenta la leyenda que Dios al crear el mundo colocó tres varillas de diamante con 64 discos de oro en la primera. También creó un monasterio con monjes que tenian que resolver esta torre de Hanoi divina. Se dice que el dia en que la terminen el mundo terminara. xD desde luego este Edouard Lucas creo una buena falacia.


Solucion 4 discos