user49913
Просветленный
(38763)
3 года назад
есть альтернатива: добавь в эту функцию параметр int prefix
пусть она генерирует сочетания из countValue элементов префикса массива result, начиная с индекса prefix
и сделай её рекурсивной, т. е. функция будет выбирать следующий элемент i из отрезка [prefix..rightBorder] и вызывать на каждый такой элемент Generate(result, countValue-1, i+1)
- есть какой-нибудь набор чисел: [1, 2, 3, 4, 5]
- задано число n, которое определяет количество чисел в сочетании, например, n = 3
Необходимо вывести все сочетания без повторений (с учетом перестановки значений):
Для данного примера ответ будет такой:
1, 2, 3
1, 2, 4
1, 2, 5
1, 3, 4
1, 3, 5
1, 4, 3
2, 3, 4
2, 3, 5
2, 4, 5
3, 4, 5
В интернете нашел код (см. скрин), который работает, но далеко не оптимальный.
В данном коде на каждое n (в коде это countValue) отдельный case идет + с увеличением этого n придется увеличивать количество for и их вложенности.
Если у меня выскачет значение n, например, 20, то не горю желанием описывать структуру из 20 for'ов.
Поэтому возникли вопросы:
- как упростить данный код (упрощение = свести максимальную вложенность до нескольких for'ов)?
- или есть какие-нибудь альтернативы данного решения?