Задать вопрос
@Nalali98
Учусь на программиста с помощью книг

Ханойские башни на Python?

Помогите пожалуйста, сижу целый день и не понимаю, как работает функция..
Вот код:
def move(n, start, finish) :
    if n==1:
        print(n, start, finish) 
    else:
         tmp= 6 - start - finish
         move(n - 1, start, tmp)
         print(n, start, finish) 
         move(n - 1, tmp, finish)
n=int(input())
move(n, 1, 3)

Что не понятно: как программа понимает код, и копирует кольца n-1, тоесть если я например напишу 6 колец, то он скопирует 5 во временную переменную tmp.. Где это указано в коде каким образом. Это, что метод присваивания аргументов так выглядит после else..?
И ещё я не понимаю, откуда программа понимает, что большее кольцо нельзя поместить на меньшее? Тоесть как он понимает, это же в коде не указано, что 2 нельзя положить на 1?
  • Вопрос задан
  • 2444 просмотра
Подписаться 1 Простой 2 комментария
Решения вопроса 1
@ultraevs
Student
def hanoi(a, b, c, n):
    if n == 1:  # рекурсивное конечное условие
        print(a, '->', c)
    else:
        hanoi(a, c, b, n - 1)
        print(a, '->', c)
        hanoi(b, a, c, n - 1)

hanoi('A', 'B', 'C', 5)


Вот код, который будет расписывать все шаги. В аргументах функции hanoi указывается три башни А, В, С и число.
Если число равняется одному, то логично, что потребуется только один шаг перемещения. Если число оказывается не равным 1, то функция вызывает сама себя, но уменьшив число на один так как одна операция уже произошла и меняет местами башни, после чего печатает новый результат. После снова проверяет не равно ли 1, если нет, то цикл повторяется.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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