В рекурсии каждая функция имеет свое собственное состояние.Таким образом, когда запускается функция Towers(n-1,fr,spare,to)
, она рекурсивно вызывает себя, уменьшая значение параметра на 1 при каждом вызове.После того, как эта функция соответствует критерию n==1
, ее рекурсия заканчивается, а затем рекурсия начинается для Towers(1,fr,to,spare)
, и это продолжается.
Чтобы лучше понять процесс, добавьте несколько дополнительных операторов печати и наблюдайте за изменением значений.
def printmove(fr,to):
print('move from'+ str(fr)+'to'+str(to))
def Towers(n,fr,to,spare):
print "n: " , n
if n == 1:
printmove(fr,to)
else:
Towers(n-1,fr,spare,to)
print "did A"
Towers(1,fr,to,spare)
print "did B"
Towers(n-1,spare,to,fr)
print "did C"
Towers(4,"P1","P2","P3")
Я не публикую здесь ответ, но в основном первая функция запускается до тех пор, пока n не выйдет из4 к 1, затем второй и так далее.