#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;
}

注释说明:

  1. generateSubsets函数用于生成集合的子集。接收参数包括原始集合arr、存储子集的数组subset、元素个数n、当前处理的元素索引index
  2. index等于n时,表示已经处理完所有元素,输出当前子集。
  3. 选择当前元素时,将subset[index]设为1,然后递归调用generateSubsets处理下一个元素。
  4. 不选择当前元素时,将subset[index]设为0,然后递归调用generateSubsets处理下一个元素。
  5. main函数中,首先输入元素个数n和元素值。然后创建存储子集的数组subset并调用generateSubsets函数。最后返回0表示程序正常结束。
C语言设计递归算法生成n个元素组成的集合{r1rn}的子集逐句注释

原文地址: https://www.cveoy.top/t/topic/jdWl 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录