Я думаю, что Вы можете легко решить эту проблему, используя подход «Разделяй и властвуй»:
Предположим, что U должен решить проблему перемещения n дисков из src в dest с помощью некоторого вспомогательного колышка.
Вы можете рекурсивно определить функцию:
towers(n,src,dest,peg)
{
if(n==1) //BASE CASE
move a disc from src to dest.
else //INDUCTIVE CASE
{
towers(n-1,src,aux,dest);
towers(1,src,dest,aux);
towers(n-1,aux,dest,src)
}
}
Анализ сложности:
Т (п) = 2T (п-1) + 1
Это приводит к решению T (n) = O (2 ^ n) [экспоненциальный порядок].
Может быть, вы также можете использовать какое-то напоминание для хранения решения уже решенных подзадач, чтобы еще больше повысить сложность времени, но это компромисс для увеличения использования сложности пространства.