El clásico caso del algoritmo recursivo de la torre de Hanoi implementado por python

@本文来源于公众号:csdn2299,喜欢可以关注公众号 程序员学府
学到递归的时候有个汉诺塔的练习,汉诺塔应该是学习计算机递归算法的经典入门案例了,所以本人觉得可以写篇博客来表达一下自己的见解。这markdown编辑器还不怎么会用,可能写的有点格式有点丑啦,各位看官多多见谅.

Internet para encontrar una imagen de la Torre de Hanoi, Torre de Hanoi es utilizar el disco con la columna central de la más a la izquierda en la columna descendente pila fin, significa lo mismo que un C Mantenga el original Inserte la descripción de la imagen aquí
 Corta el rollo Primero enciende el código

def move(n, a, buffer, c):
  if(n == 1):
    print(a,"->",c)
    return
  move(n-1, a, c, buffer)
  move(1, a, buffer, c)
  move(n-1, buffer, a, c)
move(3, "a", "b", "c")

El primero es definir una función de movimiento. Los cuatro parámetros representan el número de placas en la columna a, y el búfer es la columna b. El búfer se llama búfer para una fácil comprensión. Como su nombre lo indica, es un búfer que mueve a a c. Entonces c es el objetivo Columnas
Leamos
 la escritura general de la recursión del código de función , debe haber una condición para detener el ciclo de recursión, por lo que al juzgar que el número de placas en una columna es 1, puede detener la recursión y regresar, y solo hay una encima de la columna. Moví a a. El punto clave es el siguiente código. La recursión es en realidad un algoritmo muy abstracto. Necesitamos usar el pensamiento abstracto para pensar sobre el problema de la Torre de Hanoi. Piense en la placa en una columna en dos, que es lo anterior. La placa inferior y la placa inferior, si se muestran Inserte la descripción de la imagen aquí
  No nos importa cuántas placas hay en la parte superior, cada una de nuestras operaciones es mover la placa inferior a través del búfer búfer a la columna c.
 Los zapatos para niños deben estar pensando por qué quieren mover la salsa. De hecho, este es un resumen. Si juegas el juego Hanota, encontrarás la regla. De hecho, este juego es mantener todos los métodos anteriores para pasar b, y luego obtenga el último de a a c, y luego acumule sus cerebros para mover b a c. En este momento, encontrará que el original en b también debe almacenarse a través del vacío, a. n-1 arriba de b, y luego mueve el máximo final de b a c, aquí se refleja la ley, también puedes abstraer el método de movimiento, y puedes usar esto para diseñar un algoritmo de programa.
 Ahora usemos la abstracción Interpretación del código restante.

mover (n-1, a, c, buffer)

Este código significa mover el n-1 arriba de la columna que acabamos de mencionar para mover al búfer del búfer a través de c de acuerdo con la regla de pequeño a grande. Esta función entra en recursión.

mover (1, a, buffer, c)

Cuando se completa la ejecución de la declaración anterior, es decir, se completa el movimiento recursivo de n-1 placas, la ejecución de esta declaración es mover una placa en una columna a c, que es la llamada placa inferior

mover (n-1, buffer, a, c)

El último paso es mover el n-1 en a al búfer justo ahora. Debe moverse a través de a a c para completar el movimiento de toda la Torre de Hanoi, por lo que el último paso es pasar el n-1 en un Cuando el búfer se mueva al pilar C.
 Escribiré todo el proceso de movimiento, tomando como ejemplo 3 en el pilar A.

/**
我把3个盘子的汉诺塔全部通过代码演示,按缩进原则,每一个缩进即进一个递归函数,每打印一次即中止当前递归,也就是每个print
说明:
  1.n = 3, n = 2, n = 1是每次执行if(n == 1)的结果,这里就不写判断了,相信童鞋们也能看懂,也就是n不等与1时就减1进入递归
  2.请注意a,b,c柱每次进入函数的顺序,不要被形参带错路了,看准每次函数参数的实参 
**/
move(3, "a", "b", "c")
n=3:
  //开始从a上移动n-1即2个盘子通过c移动到b,以腾出c供a最后一个盘子移动
  move(2, "a","c","b")
  n=2:
  //开始进行n=2的一个递归,把当前a('a')柱上的n-1个盘子通过c('b')移动到b('c')
    move(1, "a", "b", "c")
    n=1:
    //n=2的第一个递归完成,打印结果,执行当前子函数剩余代码
      print("a", "->", "c") 
    move(1, "a", "c", "b")
    n=1:
      print("a", "->", "b")
    move(1, "c", "a", "b")
    n=1:
      print("c", "->", "b")
     //到这里完成了a柱上面的n-1即是2个盘子的移动
//开始把a柱上最后一个盘子移动到c柱上
move(1, "a", "b", "c")
n=1:
  print("a", "->", "c")
  //到这里完成移动a柱上的最后一个盘子到c柱上 
move(2, "b", "a", "c")
n=2:
//开始进行n=2的第二个递归,即把当前b('b')的盘子(n-1个)通过a('a')移动到c('c')上
  move(1, "b", "c", "a")
  n=1:
  //n=2 的第二个递归完成,打印结果并执行当前子函数的剩余代码
    print("b", "->", "a")
  move(1, "b", "a", "c")
  n=1:
    print("b", "->", "c")
  move(1, "a", "b", "c")
  n=1:
    print("a", "->", "c")
    //到这里把b上的盘子通过a移动到c,
//整个代码执行完毕,汉诺塔移动完成

El resultado final de la impresión es:
Inserte la descripción de la imagen aquí
después de comprender el principio del algoritmo recursivo de la Torre de Hanoi, los zapatos para niños pueden escribir un programa para probar. Aquí es solo para aprender la recursión de Python para usar Python, los zapatos para niños se pueden implementar en otros idiomas, Hanoi Tower Realmente puede ayudar a comprender el principio de recursión. ¡La importancia de la recursividad en la programación es evidente!
Muchas gracias por leer
. Cuando decidí estudiar Python en la universidad, descubrí que me comía una mala base informática. No tenía una calificación académica. Esto
no es nada que hacer. Solo puedo compensarlo, así que comencé mi propio contraataque fuera de la codificación. El camino, continúe aprendiendo los conocimientos básicos de Python, el estudio en profundidad de los conceptos básicos de la computadora, resuelto, si no está dispuesto a ser mediocre, ¡únase a mí en la codificación y continúe creciendo!
De hecho, no solo hay tecnología aquí, sino también cosas más allá de esas tecnologías. Por ejemplo, cómo ser un programador exquisito, en lugar de "seda de gallo", el programador en sí es una existencia noble, ¿no? [Haz clic para unirte] ¡ Quieres ser tú mismo, quieres ser una persona noble, vamos!

34 artículos originales publicados · Me gusta12 · Visitantes más de 20,000

Supongo que te gusta

Origin blog.csdn.net/chengxun03/article/details/105477240
Recomendado
Clasificación