Чтобы рассчитать количество ходов для Ханойских башен, есть (как минимум) три подхода.
1.) Решите Ханойские башни и используйте глобальную переменную для подсчета
- добавить глобальную переменную в качестве счетчика
- реализовать решение для Ханойских башен,
- удалить все операторы печати
- увеличить глобальный счетчик в каждом месте, гдеВы бы переместили диск
Теперь, чтобы запустить это решение. сбросьте глобальную переменную в 0, запустите ваш скрипт и проверьте результат глобального в конце
2.) Реализуйте Ханойские башни и позвольте функции возвращать количество ходов для каждого решения (и просто удалитеоператоры печати)
Это решение, на мой взгляд, чище, поскольку не требует глобального.
3.) Не пишите программу, а просто сделайте математическое доказательство того, чторешение 2 ** n -1 (подход называется математической индукцией)
Attached Решение для 2.)
def req_steps(num_disks):
if num_disks > 1:
steps = req_steps(num_disks - 1)
steps += req_steps(num_disks - 1)
steps += 1
return steps
return 1
if __name__ == '__main__':
for i in range(1,13):
print("%2d %4d %4d" % (i, req_steps(i), 2 ** i - 1))
Вывод должен выглядеть так:
1 1 1
2 3 3
3 7 7
4 15 15
5 31 31
6 63 63
7 127 127
8 255 255
9 511 511
10 1023 1023
11 2047 2047
12 4095 4095