Поиск всех комбинаций значений массива через рекурсию
Мне необходимо получить комбинации массива Integer[] s = {1, 2, 3};
в следующем виде:
1
2
12
3
13
23
123
Сделать это необходимо через рекурсивную функцию! У меня даже нет идеи как начать, прошу меня простить что даже не привожу код попыток!
Ответы (2 шт):
Автор решения: Sergey Zh.
→ Ссылка
Код возможно не самый красивый, потому что писал на скорость :)
public static void recursionCombination(String str, int count, Integer[] array, List<Integer> list) {
for (int i = 0; i < array.length; i++) {
if (list.contains(array[i])) break;
System.out.println(new StringBuilder(str + array[i]).reverse().toString());
if (count < array.length - 1) {
List<Integer> list1 = new ArrayList<>(list);
list1.add(array[i]);
recursionCombination(str + array[i], count+1, array, list1);
}
}
}
Вот, это рекурсивный метод. Его нужно будет вызвать из метода main следующими строчками:
Integer[] s = {1, 2, 3};
recursionCombination("", 0, s, new ArrayList<>());
Автор решения: Neuro
→ Ссылка
Для этого существует алгоритм порождение подмножеств в рекурсивном виде. Для этого у нас будет функция которая манипулирует списком, и на каждом этапе добавлять и убирать индекс элементов. Во время рекурсии у нас строится дерево подмножеств, где k будет глубиной 
public static void search(Integer k, ArrayList<Integer> ind,Integer n){
if (k==n){
//обработка индексов
}
else{
ind.add(k);
search(k+1,ind,n);
ind.remove(ind.size() - 1);
search(k+1,ind,n);
}
return;
}