C语言递归算法生成集合子集 - 详细注释
#include <stdio.h>
void generateSubsets(int arr[], int subset[], int n, int index) { // 递归终止条件,当index达到n时,输出当前子集 if (index == n) { for (int i = 0; i < n; i++) { if (subset[i] == 1) { printf('%d ', arr[i]); } } printf("\n"); return; }
// 选择当前元素
subset[index] = 1;
generateSubsets(arr, subset, n, index + 1);
// 不选择当前元素
subset[index] = 0;
generateSubsets(arr, subset, n, index + 1);
}
int main() { int n; printf("Enter the number of elements: "); scanf("%d", &n);
int arr[n];
printf("Enter the elements: ");
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
int subset[n];
generateSubsets(arr, subset, n, 0);
return 0;
}
注释说明:
generateSubsets函数用于生成集合的子集。接收参数包括原始集合arr、存储子集的数组subset、元素个数n、当前处理的元素索引index。- 当
index等于n时,表示已经处理完所有元素,输出当前子集。 - 选择当前元素时,将
subset[index]设为1,然后递归调用generateSubsets处理下一个元素。 - 不选择当前元素时,将
subset[index]设为0,然后递归调用generateSubsets处理下一个元素。 - 在
main函数中,首先输入元素个数n和元素值。然后创建存储子集的数组subset并调用generateSubsets函数。最后返回0表示程序正常结束。
原文地址: https://www.cveoy.top/t/topic/fyUm 著作权归作者所有。请勿转载和采集!