#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int count_rec = 0, count_loop = 0;
// Recursive Function to Generate Combinations
void generateCombinationsRecursive(int arr[], int n, int r, int index, int k, int *subset) {
if (k == r) {
count_rec++;
return;
}
for (int i = index; i < n; i++) {
subset[k] = arr[i];
generateCombinationsRecursive(arr, n, r, i + 1, k + 1, subset);
}
}
// Wrapper Function for Recursion
void runRecursive(int arr[], int n, int r) {
int *subset = (int *)malloc(r * sizeof(int));
generateCombinationsRecursive(arr, n, r, 0, 0, subset);
free(subset);
}
// Brute Force (Loop-Based) Approach
void runLoopBased(int arr[], int n) {
for (int i = 0; i < n - 2; i++) {
for (int j = i + 1; j < n - 1; j++) {
for (int k = j + 1; k < n; k++) {
count_loop++;
}
}
}
}
// Main Function for Execution
int main() {
int arr[] = {1, 2, 3, 4, 12, 9, 5, 70}; // Example array
int n = sizeof(arr) / sizeof(arr[0]);
int r = 3;
clock_t start, end;
double time_rec, time_loop;
// Measure Time for Recursive Approach
start = clock();
runRecursive(arr, n, r);
end = clock();
time_rec = ((double)(end - start)) / CLOCKS_PER_SEC;
// Measure Time for Loop-Based Approach
start = clock();
runLoopBased(arr, n);
end = clock();
time_loop = ((double)(end - start)) / CLOCKS_PER_SEC;
// Print Results
printf("Number of Combinations (Recursive): %d\n", count_rec);
printf("Execution Time (Recursive): %f seconds\n", time_rec);
printf("Number of Combinations (Loop-Based): %d\n", count_loop);
printf("Execution Time (Loop-Based): %f seconds\n", time_loop);
return 0;
}