Задать вопрос

Рекурсия в python?

Сейчас я пытаюсь понять алгоритм решения задачи про ханойскую башню, вот такой код решения:
def moveTower(height,fromPole, toPole, withPole):
    if height >= 1:
        print(fromPole, toPole, withPole, height)
        moveTower(height-1,fromPole,withPole,toPole)
        moveDisk(fromPole,toPole, height)
        print(fromPole, toPole, withPole, height)
        moveTower(height-1,withPole,toPole,fromPole)

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

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


И вот таков результат:
A B C 3
A C B 2
A B C 1
moving disk from A to B
height 1
A B C 1
moving disk from A to C
height 2
A C B 2
B C A 1
moving disk from B to C
height 1
B C A 1
moving disk from A to B
height 3
A B C 3
C B A 2
C A B 1
moving disk from C to A
height 1
C A B 1
moving disk from C to B
height 2
C B A 2
A B C 1
moving disk from A to B
height 1
A B C 1


Я с python знаком поверхностно, но рекурсия ведь и в африке рекурсия: первый print(fromPole, toPole, withPole, height), который в строке 3, выводит всё понятно. После того, как срабатывает moveTower(height-1,fromPole,withPole,toPole) fromPole = A, withPole = C, toPole = B? И почему в третий раз при print(fromPole, toPole, withPole, height) выводится A B C 1? Почему эти значения меняются?

Алгоритм я понял: перенести n-1 с основного стержня на временный, затем последний диск в основном стержне перенести на конечный и перенести все с временного на конечный, но не понял, как работает эта функция изнутри.

Купил теперь книгу "Ханойские башни", чтобы понять.
  • Вопрос задан
  • 1379 просмотров
Подписаться 1 Оценить 3 комментария
Пригласить эксперта
Ответы на вопрос 1
virtual_universe
@virtual_universe
Питонист:)
На будущее:
Скачать thonny - очень удобная IDE для таких задач. Конечно писать в ней веб-приложения не очень, а вот смотреть для понимания решения задачи самое то.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы