Это проблема с рекурсией, которая меня действительно путала.Сгенерировать все возможные пары
Я хочу сгенерировать все пары для диапазона чисел. Они не должны быть все сохранены, только что сгенерированы хотя бы один раз. Например, для 0 1 2 3 4 5
что бы
(0 1) (2 3) (4 5)
(0 1) (2 4) (3 5)
(0 1) (2 5) (3 4)
(0 1) (3 4) (2 5)
(0 1) (3 5) (2 4)
(0 2) (1 3) (4 5)
(0 2) (1 4) (3 5)
etc.
Как вы можете видеть, моя методика заключается в создании первой пары, используя первое число доступных для использования (в начале это 0, используя от 0 до 5), итерация через все остальные числа для создания первых пар. Затем для каждой пары я повторяю оставшиеся числа. Так что если моя пара была 0 1
, я бы повторил этот процесс с 2 3 4 5
.
Моя проблема: я не могу понять, как реализовать это как рекурсивную функцию. Я понял, что он должен поддерживать список всех решений (так что можно найти что-то), а также добавлять небольшие решения и комбинировать их. Это слишком сложно для меня, чтобы попытаться представить, так что любая помощь в методе или псевдокоде (как можно более простое) будет с благодарностью оценена.
Я не уверен, что рекурсивная функция является правильным инструментом для создания пар. Если вам нужно было генерировать не только пары, но и '(0 2 4 5)' и '(1 3 4)' и т. Д., Вы могли бы использовать рекурсивную функцию, которая принимает два аргумента: текущую перестановку и список оставшихся чисел. – Stijn
Ваши правила не ясны. Во-первых, очевидно, что '(0 1) (2 3) (4 5)' действительно, но '(0 1) (2 3) (5 4)' неверно; верный? Кроме того, '(0 1) (2 3) (4 5)' уникально из '(0 1) (4 5) (2 3)'; верный? Что именно определяет действительное спаривание? – user2338816
@ user2338816 Первые два на самом деле одинаковы. Я допустил ошибку, последние два, о которых вы говорили, тоже совпадают. – qwr