用递归的方法求一个集合的子集。
实现代码如下:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define N 20 int used[N]; void output(char *str); int diver(char *str, int len, int index); int main( void ) { char input[20]; int len; printf("Please enter a string:"); while(fgets(input, 20, stdin) == NULL || input[0] == '/n') { printf("Input error!/n"); printf("Please enter a string again:"); } input[strlen(input) - 1] = '/0'; len = strlen(input); diver(input, len,0); return 0; } int diver(char *str, int len, int index) { if(index >= len) output(str); else { used[index] = 1; diver(str, len, index + 1); used[index] = 0; diver(str, len, index + 1); } return 0; } void output(char *str) { int i; printf("{"); for(i = 0;i < N; i++) if(used[i]) printf("%c",str[i]); printf("}"); printf("/n"); }