Saltar al contenido
EjemplosEnglishEspacio →

Torres de Hanói

Resuelve el clásico rompecabezas de las torres paso a paso.

Nivel
Avanzado
Conceptos:
Entrada y salida
SubProcesos
Recursión
Si
Abrir en Codoritmo

Ejecuta, modifica y depura este ejemplo en el navegador.

Lo que aprenderás

Hanoi es un SubProceso recursivo: se llama a sí mismo con un disco menos. El caso base (un solo disco) es el que detiene la recursión.

Código

hanoi.psc · 18 líneas
SubProceso Hanoi(discos, origen, destino, auxiliar)    Si discos = 1 Entonces        Escribir "Mover disco 1 de ", origen, " a ", destino    SiNo        // Primero apartamos los discos de arriba, luego volvemos a apilarlos        Hanoi(discos - 1, origen, auxiliar, destino)        Escribir "Mover disco ", discos, " de ", origen, " a ", destino        Hanoi(discos - 1, auxiliar, destino, origen)    FinSiFinSubProcesoAlgoritmo TorresDeHanoi    Definir n Como Entero    Escribir "¿Cuántos discos? (1 a 6)"    Leer n    Hanoi(n, "A", "C", "B")    Escribir "Total de movimientos: ", 2 ^ n - 1FinAlgoritmo

Diagrama de flujo

Cada bloque del diagrama corresponde a una instrucción del código.

Algoritmo TorresDeHanoi
Algoritmo TorresDeHanoiAlgoritmo TorresDeHanoiAlgoritmo TorresDeHanoiDefinir n Como EnteroDefinir n Como EnteroEscribir "¿Cuántos discos? (1 a 6)"Escribir "¿Cuántos discos? (1a 6)"Leer nLeer nHanoi(n, "A", "C", "B")Hanoi(n, "A", "C", "B")Escribir "Total de movimientos: ", 2 ^ n - 1Escribir "Total demovimientos: ", 2 ^ n - 1FinAlgoritmoFinAlgoritmo
SubProceso Hanoi
SubProceso HanoiSíNoSubProceso Hanoi(discos, origen, destino, auxiliar)SubProceso Hanoi(discos, origen,destino, auxiliar)Si discos = 1 Entoncesdiscos = 1Escribir "Mover disco 1 de ", origen, " a ", destinoEscribir "Mover disco 1 de ",origen, " a ", destinoHanoi(discos - 1, origen, auxiliar, destino)Hanoi(discos - 1, origen,auxiliar, destino)Escribir "Mover disco ", discos, " de ", origen, " a ", destinoEscribir "Mover disco ",discos, " de ", origen, " a ",destinoHanoi(discos - 1, auxiliar, destino, origen)Hanoi(discos - 1, auxiliar,destino, origen)FinSubProcesoFinSubProceso

Ejemplo de ejecución

Esto muestra el programa al ejecutarlo. Las respuestas escritas por el usuario aparecen resaltadas.

¿Cuántos discos? (1 a 6)Respuesta del usuario: 3Mover disco 1 de A a CMover disco 2 de A a BMover disco 1 de C a BMover disco 3 de A a CMover disco 1 de B a AMover disco 2 de B a CMover disco 1 de A a CTotal de movimientos: 7

Complejidad

Cuánto trabajo y memoria necesita según la cantidad de datos (n).

Complejidad
CasoCosto
MejorO(2ⁿ)
PromedioO(2ⁿ)
PeorO(2ⁿ)
MemoriaO(n)

Desafío

Valida que la cantidad de discos esté entre 1 y 6 antes de empezar.

Ver pista

Usa Repetir ... Hasta Que alrededor del Leer n.

Abrir en Codoritmo