O caso clássico do algoritmo recursivo da torre de Hanói implementado por python

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

Internet para localizar uma foto da Torre de Hanói, Torre de Hanói é usar o disco com a coluna do meio no mais à esquerda da coluna em ordem decrescente pilha fim cima, isso significa o mesmo que um C Manter o original Insira a descrição da imagem aqui
 corte a porcaria , Primeiro acenda o 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")

O primeiro é definir uma função móvel. Os quatro parâmetros representam o número de placas na coluna a, e o buffer é a coluna b. O buffer é denominado buffer para facilitar a compreensão. Como o nome indica, é um buffer que move de a para c. Em seguida, c é o destino. Colunas
Vamos ler
 a escrita geral da recursão do código de função ; deve haver uma condição para interromper o ciclo de recursão; portanto, ao julgar que o número de placas na coluna a é 1, você pode interromper a recursão e retornar, e há apenas uma acima da coluna a Mudei de a para C. O ponto principal é o seguinte código: A recursão é na verdade um algoritmo muito abstrato. Precisamos usar o pensamento abstrato para pensar no problema da Torre de Hanói. Pense na placa da coluna em duas, que é a anterior. A placa inferior e a placa inferior, se mostradas Insira a descrição da imagem aqui
  Não nos importamos com quantas placas estão no topo, todas as nossas operações são mover a placa inferior através do buffer da coluna b para a coluna c.
 O calçado infantil deve estar pensando por que eles querem mudar o molho. Na verdade, este é um resumo. Se você jogar o jogo Hanota, encontrará a regra. Na verdade, este jogo é para manter todos os métodos acima b e, em seguida, pegue o último de a a c e depois mova seu cérebro para mover b para C. Nesse momento, você descobrirá que o original em b também deve ser armazenado no vazio, a. n-1 acima be mova o máximo final b para c, aqui a lei é refletida, você também pode abstrair o método de movimento e usá-lo para projetar um algoritmo de programa.
 Vamos usar a abstração agora Interpretação do código restante

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

Esse código significa mover o n-1 acima da coluna a mencionada para mover para o buffer do buffer através de c de acordo com a regra de pequeno para grande. Esta função entra em recursão.

mover (1, a, buffer, c)

Quando a execução da instrução acima é concluída, ou seja, o movimento recursivo das placas n-1 é concluído, a execução dessa instrução é mover uma placa na coluna a para c, que é a chamada placa inferior

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

O último passo é mover o n-1 de a para o buffer agora, que deve ser movido através de a para c para concluir o movimento de toda a Torre de Hanói, de modo que o último passo é passar o n-1 em um Quando o buffer se move para o pilar C.
 Escreverei todo o processo de movimentação, considerando 3 no pilar a como exemplo

/**
我把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,
//整个代码执行完毕,汉诺塔移动完成

O resultado final da impressão é:
Insira a descrição da imagem aqui
depois de entender o princípio do algoritmo recursivo da Hanoi Tower, o calçado infantil pode escrever um programa para experimentar.Aqui está apenas para aprender a recursão do Python e, usando o Python, o calçado infantil pode ser realizado em outros idiomas. Pode realmente ajudar a entender o princípio da recursão.A importância da recursão na programação é evidente por si mesmo!
Muito obrigado pela leitura
. Quando escolhi python na universidade, descobri que comia uma base ruim de computador. Não tinha qualificação acadêmica. Isso
não é o que fazer. Só posso compensar isso. Na estrada, continue a aprender o conhecimento básico de python, estudo aprofundado dos conceitos básicos de computador, resolvido, se você não estiver disposto a ser medíocre, junte-se a mim na codificação e continue a crescer!
De fato, não há apenas tecnologia aqui, mas também coisas além dessas tecnologias.Por exemplo, como ser um programador requintado, em vez de "seda artificial", o próprio programador é uma existência nobre, não é? [Clique para participar] Quer ser você mesmo, quer ser uma pessoa nobre, vamos lá!

34 artigos originais publicados · Gostei12 · Visitantes com mais de 20.000

Acho que você gosta

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