Ханойская башня с помощью Head Recursion? - PullRequest
0 голосов
/ 14 декабря 2018

Мне было интересно, можно ли решить стандартную проблему Ханойской башни с помощью рекурсии головы.У меня есть смутное представление о том, что это не должно быть возможно при одинаковой нумерации дисков (от 1 (самый маленький) до N (самый большой) диск) и 3-х башен.

1 Ответ

0 голосов
/ 14 декабря 2018

Для наиболее разумных версий того, что вы могли бы сказать, нет.Технически ответ - да.

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

Однако решение может быть полностью проанализировано и решено в итерационном алгоритме.Мы можем исследовать позицию, вычислить, где мы должны быть в решении, и дать следующий ответ.См. https://www.geeksforgeeks.org/iterative-tower-of-hanoi/ для примера этого анализа.

И то, что может быть записано с использованием одного итеративного цикла, всегда может быть переписано оттуда с использованием либо хвостовой рекурсии, либо рекурсии головы.Вы получаете хвостовую рекурсию, выполнив одну итерацию, а затем сделав рекурсивный вызов для продолжения в цикле.Вы получаете рекурсию головы, сначала выполняя рекурсивный вызов, чтобы добраться до желаемой в данный момент позиции, а затем выполняя текущую итерацию.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...