¿Es posible resolver el problema de Towers of Hanoi de forma iterativa? En caso afirmativo, ¿cómo?

Algo que desarrollé antes de aprender sobre la recursividad (1977 más o menos), especialmente porque solo tenía acceso a BASIC para hacer esto:

Comience con una torre llena. Marque los discos en orden de tamaño de 1 a N. Marque las posiciones como A, B, C (no es realmente necesario, pero es un recordatorio de que solo hay 3 posiciones). En cualquier momento, solo habrá un movimiento “correcto”. Ese movimiento correcto es:

1) No es el último disco que se movió. Por lo tanto, solo se pueden mover dos posiciones.

2) Realice el movimiento que coloca un disco impar encima de un disco par o un disco par encima de un disco impar. (ref: todos los discos están numerados del 1 al N según el tamaño)

2a) Si hay más de una opción, mueva el disco con el número más alto.

2b) Nunca ponga un par encima de par o impar encima de impar.

(Estoy escribiendo esto de memoria.) Pero básicamente, 2a y 2b y moverás la torre.

Cortesía de Wikipedia:
“Alternando entre los discos más pequeños y los siguientes, siga los pasos para el caso apropiado:
Para un número par de discos:

  • hacer el movimiento legal entre las clavijas A y B
  • hacer el movimiento legal entre las clavijas A y C
  • hacer el movimiento legal entre las clavijas B y C
  • repetir hasta completar

Para un número impar de discos:

  • hacer el movimiento legal entre las clavijas A y C
  • hacer el movimiento legal entre las clavijas A y B
  • hacer el movimiento legal entre las clavijas C y B
  • repetir hasta completar

En cada caso, se realizan un total de 2n-1 movimientos “.
Torre de Hanoi

Sí. Cualquier problema recursivo también se puede representar de forma iterativa, aunque la representación iterativa puede ser más complicada.

More Interesting

¿Por qué todos los ceros (0000 0000) en el campo de exponente representan el exponente -126 y no -127 en coma flotante IEEE de precisión simple?

¿Cuánto de aprender un lenguaje de programación de computadoras (como C ++) tiene sus raíces en las matemáticas, es decir, ¿necesito tener un cerebro matemáticamente competente para escribir programas?

¿Qué es un algoritmo para convertir de una matriz de adyacencia a listas de adyacencia?

Cómo identificar problemas del mundo real que podemos resolver mediante el uso de la informática y las matemáticas

Yoshua Bengio: ¿Qué habilidades son más importantes para ser un investigador de Machine Learning, matemática o informática?

Como estudiante de matemáticas, ¿cuáles son las clases más importantes que podría tomar en informática?

¿Cómo podemos encontrar esos enteros cuyo primer y último dígito son iguales entre dos números dados?

Cómo escribir un programa que calcule 'b' elevado a power 'n' usando solo suma e iteración

¿Cuál es una forma simple o intuitiva de entender por qué todos los números aleatorios son normales (Teorema de Borel)?

¿Qué haría como programador (específicamente un ingeniero de software) que implicaría un conocimiento matemático sólido?

Cómo imprimir dos variables enteras en la misma línea en Python

¿Una representación no discreta de información coexiste con nuestro uso discreto de BITS?

Cómo entender el concepto matemático de la máquina de turing

¿Cómo podemos convertir una imagen en un sistema binario (0 y 1) o un código como QR?

¿Por qué los estudiantes que se especializan en matemáticas, física, informática y estadística no se gustan?