Я сделал эту функцию для печати powerset в данном массиве,
Я по своей сути построил функцию с циклом for в качестве основы, а затем преобразовал ее в чисто рекурсивный, но мне кажется, что я попал в тупик.
вот функция:
void powerSet(int* arr, int* p, int n, int pos, int index)
{
if (index == n)
{
return;
}
for (int i = index; i<n; i++)
{
p[pos] = arr[i];
for (int j = 0; j <= pos; j++)
printf("%d ", p[j]);
printf("\n");
powerSet(arr, p, n, pos + 1, i + 1);
}
}
UPDATE:
вот мой код, по какой-то причине он только печатает
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
сниппет:
void powerSet(int* arr, int* p, int n, int pos, int index)
{
if (index == n)
{
return;
}
p[pos] = arr[index];
PrintRec(0, pos, p);
powerSet(arr, p, n, pos + 1, index + 1);
}
void getSubSet(int*arr, int*p, int n, int i, int end)
{
if (i > end)
return;
powerSet(arr, p, n, i, end);
getSubSet(arr, p, n, i + 1, end);
}
void PrintRec(int j, int end, int* p)
{
if (j > end)
{
printf("\n");
return;
}
printf("%d ", p[j]);
PrintRec(j + 1, end, p);
}
основной:
int arr[] = { 1,2,3,4,5 };
int n = sizeof(arr) / sizeof(arr[0]);
int temp[5];
getSubSet(arr, temp, n, 0, 0);
РЕДАКТИРОВАТЬ: Опубликовал решение!