Ханойская башня — это классическая головоломка, состоящая из трех стержней и нескольких дисков разного размера. Цель состоит в том, чтобы переместить все диски из первой башни в третью башню, соблюдая правила, согласно которым за раз можно перемещать только один диск и что диск большего размера не может быть помещен поверх диска меньшего размера. В этом посте я расскажу о решении головоломки Ханойской башни с использованием рекурсии в Python.

Наша цель — построить рекурсивную функцию, которая принимает 4 аргумента: целое число n, представляющее количество дисков, и 3 строки, представляющие имена 3 башен (например, «Башня1», «Башня2», «Башня3»).

Ниже я построил функцию, которая сначала проверяет, есть ли только 1 диск. Если есть, он напечатает сообщение о том, что диск следует переместить из первой башни в третью башню. Если имеется более 1 диска, функция вызовет себя дважды, каждый раз с уменьшением количества дисков на 1. Между этими двумя рекурсивными вызовами будет напечатано сообщение о том, что самый верхний диск следует переместить из первой башни в третья башня.

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

Приведенный ниже код является решением головоломки «Ханойская башня».

steps=[]

def tower_of_hanoi(n, Tower1, Tower2, Tower3):
 steps.append(1)
 if n==1:
  print ("Move disk from Tower", Tower1," to Tower", Tower3)
  return
 tower_of_hanoi(n-1, Tower1, Tower3, Tower2)
 print ("Move disk"," from Tower", Tower1," to Tower", Tower3)
 tower_of_hanoi(n-1, Tower2, Tower1, Tower3)

# n = number of disks
n = 3

# Run the Tower of Hanoi recursive function
tower_of_hanoi(n,' 1','2','3')
print(f'\nTotal number of steps: {sum(steps)}')

Когда функция вызывается с n = 3 и именами башен как «1», «2» и «3», она решит головоломку «Ханойская башня» для 3 дисков, распечатав шаги, предпринятые для этого, а также печать общего количества пройденных шагов.

Move disk from Tower 1 to Tower 3
Move disk from Tower 1 to Tower 2
Move disk from Tower 3 to Tower 2
Move disk from Tower 1 to Tower 3
Move disk from Tower 2 to Tower 1
Move disk from Tower 1 to Tower 3

Total number of steps: 7

Вот и все, головоломка Ханойской башни решена с помощью рекурсии в питоне.

Спасибо за чтение!

Подпишитесь на эту учетную запись и нажмите кнопку хлопка, чтобы поддержать меня.

Дополнительные материалы на PlainEnglish.io.

Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord.

Повысьте узнаваемость и признание вашего технического стартапа с помощью Circuit.