Torres de Hanoi Python - entendendo a recursão [duplicado]

Esta pergunta já tem uma resposta aqui:

Torre de Hanói: Algoritmo Recursivo 24 respostas

Eu sou completamente novo em Python e atualmente estou revisando um tutorial sobre As Torres de Hanói e a recursão. Eu pensei que tinha entendido a recursão até que eles deram este exemplo:

def moveTower(height,fromPole, toPole, withPole):
    if height >= 1:
        moveTower(height-1,fromPole,withPole,toPole)
        moveDisk(fromPole,toPole)
        moveTower(height-1,withPole,toPole,fromPole)
    #print(withPole)

def moveDisk(fp,tp):
    print("moving disk from",fp,"to",tp)


moveTower(3,"A","B","C")

que imprime os movimentos corretos para resolver o problema das torres de Hanói com 3 discos: movendo o disco de A para B movendo o disco de A para C movendo o disco de B para C movendo o disco de A para B movendo o disco de A para B movendo o disco de C para A movendo o disco de C para B movendo o disco de A para B

Minha pergunta é: como isso acontece ?! alguém poderia passar por cima das linhas do código para que eu entenda como ele imprime os movimentos corretos? Estou principalmente confuso com a forma como o valor defp etp pode mudar deA paraB paraC. Desculpe se esta é uma pergunta ampla! Qualquer ajuda seria muito apreciada!

questionAnswers(5)

yourAnswerToTheQuestion