#include <stdio.h>
#include <stdlib.h>
void printSubset(int *subset, int size) {
printf("[");
for (int i = 0; i < size; i++) {
printf("%d", subset[i]);
if (i < size - 1) printf(", ");
}
printf("]\n");
}
void generateSubsets(int *nums, int n, int index, int *subset, int subsetSize) {
if (index == n) {
printSubset(subset, subsetSize); // print current subset
return;
}
// Exclude current element
generateSubsets(nums, n, index + 1, subset, subsetSize);
// Include current element
subset[subsetSize] = nums[index];
generateSubsets(nums, n, index + 1, subset, subsetSize + 1);
}
int main() {
int nums[] = {1, 2};
int n = sizeof(nums) / sizeof(nums[0]);
int *subset = (int *)malloc(n * sizeof(int));
generateSubsets(nums, n, 0, subset, 0);
free(subset);
return 0;
}
if (index == n) { printSubset(subset, subsetSize); return; }
stop recursion and print current subset when all items considered
generateSubsets(nums, n, index + 1, subset, subsetSize);
explore subsets excluding current item
subset[subsetSize] = nums[index]; generateSubsets(nums, n, index + 1, subset, subsetSize + 1);
explore subsets including current item