C语言递归算法生成子集
#include <stdio.h>
// 递归函数,用于生成子集 void generateSubsets(int arr[], int size, int index, int subset[], int subsetSize) { // 输出当前子集 for (int i = 0; i < subsetSize; i++) { printf("%d ", subset[i]); } printf("\n");
// 递归终止条件
if (index >= size) {
return;
}
// 递归生成子集
for (int i = index; i < size; i++) {
// 添加当前元素到子集中
subset[subsetSize] = arr[i];
// 递归调用函数,生成剩余元素的子集
generateSubsets(arr, size, i + 1, subset, subsetSize + 1);
// 移除最后添加的元素,继续遍历下一个元素
subset[subsetSize] = 0;
}
}
int main() { int arr[] = {1, 2, 3}; int size = sizeof(arr) / sizeof(arr[0]);
int subset[100];
int subsetSize = 0;
generateSubsets(arr, size, 0, subset, subsetSize);
return 0;
}
// 主函数用于测试生成子集的递归函数 // 定义一个整型数组arr和其大小size // 定义一个整型数组subset和其大小subsetSize,用于存储子集 // 调用generateSubsets函数,传入arr、size、0、subset和subsetSize作为参数 // generateSubsets函数用于生成数组arr的所有子集 // 首先输出当前子集 // 然后判断递归终止条件,即index是否大于等于size,如果是则返回 // 如果不满足终止条件,进入循环 // 在循环中,将当前元素添加到子集中 // 然后递归调用generateSubsets函数,传入arr、size、i + 1、subset和subsetSize + 1作为参数,用于生成剩余元素的子集 // 递归调用返回后,移除最后添加的元素,继续遍历下一个元素 // 最后在主函数中调用generateSubsets函数,传入arr、size、0、subset和subsetSize作为参数,生成子集并输出
原文地址: https://www.cveoy.top/t/topic/cltz 著作权归作者所有。请勿转载和采集!