Сейчас я пытаюсь понять алгоритм решения задачи про ханойскую башню, вот такой код решения:
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 с основного стержня на временный, затем последний диск в основном стержне перенести на конечный и перенести все с временного на конечный, но не понял, как работает эта функция изнутри.
Купил теперь книгу "Ханойские башни", чтобы понять.