Я пытаюсь выяснить, как распечатать шаги для решения оптимальной головоломки Рива, но я не могу понять правильный шаг сокращения для рекурсии.
Головоломка Рэва по сути расширение проблемы Ханоя, но с 4 колышками вместо 3. Более подробная информация здесь: https://everything2.com/title/Reve%2527s+puzzle
Гипотеза Фрейма-Стюарта говорит, что значение k равно k = n + 1- sqrt (2 * n-1), где n - общее количество дисков, которые мы должны переместить. Шаг, который я не могу понять - это рекурсия для 4 колышков вместо 3. Мой код для 3 колышков:
private static void revesStepThree(int n, int topDisc, String from, String temp, String to) {
if (n == topDisc) return;
revesStepThree(n - 1, topDisc, from, to, temp);
System.out.println("Move disc " + n + " from " + from + " to " + to);
revesStepThree(n - 1, topDisc, temp, from, to);
}
Как я могу изменить это, чтобы работать для 4 колышков? По сути, по ссылке выше я не понимаю шаги 1 и 3 (которые в значительной степени совпадают, за исключением разных колышков).