@本文来源于公众号: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
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
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 é:
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á!