Комментарии 4
Классическая задача, но подана реально круто. Особенно понравилось, как ты не просто дал рекурсию, а сделал через объекты и визуализацию сразу видно, что алгоритм не читерит, а честно перекладывает диски. Такой подход на собеседовании точно выделит среди остальных.
Лучшее решение не основано на рекурсии.
Если нечетное число дисков, первым ходом переносим первый (самый маленький) диск на финальный стержень, иначе на вспомогательный. Это единственное место, где надо выбрать ход из двух возможных.
Далее на четных ходах переносим со стержня с не-первым диском на другйо стержень с не-первым диском - там единственный вариант (один меньше, другой больше - переносим меньший на больший).
На нечетных ходах переносим первый диск на стержень, который не был задейтствован два хода назад.
Все.
Отличное уточнение! Тут нужно определиться, что для нас предпочтительнее. Если хочется получить менее громоздкий код - рекурсия будет лучшим решением. Если же важна экономия памяти - лучшим выбором будет предложенный вами итеративный подход, поскольку каждый вызов рекурсивной функции требует памяти в stack frame.

Головоломка Ханойские башни на Java