Python programa de Torre de Hanoi (modificado)

Aquí, vamos a implementar un programa de pitón class Torre de Hanoi .

Debe enfrentar el reto for un desafío para encontrar el número de movimientos necesarios para mover una pila de discos de una clavija a otra clavija. Espere un segundo for, suena fácil? El hallazgo de Let son lo que está pasando y en este artículo, estamos introduciendo un capítulo de «Torre de Hanoi» .

Se le da con una pila de n discos en un arregla PEG como es más grande en la parte inferior y más pequeño es en la parte superior. Estamos obligados a cambiar toda esta pila a otra clavija (total de tres clavijas, dos están vacíos inicialmente) con la consideración de la siguiente regla:

  1. Sin disco más grande se puede colocar sobre una más pequeña.
  2. un disco a la vez.
  3. disco no puede ser transferido a la clavija B directamente. Debe ser transferido a la clavija central mientras se mueve de A a B o de B a A.

El problema está buscando fácil pero no lo es. La manera en que vamos a abordar es la recursividad. El problema es simple cuando se ve desde la perspectiva de la recursividad.

Clave: El número de pasos necesarios para cambiar la pila es exactamente igual al doble de pasos for desplazamiento de la pila de un disco inferior (La más grande), además de un paso.

    Consider the case of shifting one disk : T(1) = 2
Consider the case of shifting two disk : T(2) = 3*T(1) + 2 = 8
Consider the case of shifting three disk : T(3) = 3*T(2) + 2 = 26
.
.
.
.
T(n) = 3*T(n-1) + 2

La aplicación de esta fórmula ahora en nuestro programa de Python es nuestro próximo objetivo de resolver esto.

Así que aquí está el código:

def hanoi(x):
global repN
repN += 1
if x == 1:
return 2
else:
return 3*hanoi(x-1) + 2
x = int(input("ENTER THE NUMBER OF DISKS: "))
global repN
repN =0
print('NUMBER OF STEPS: ', hanoi(x), ' :', repN)

Salida:

ENTER THE NUMBER OF DISKS: 14                                                                                                  
NUMBER OF STEPS: 4782968 : 14


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *