// 字符串中的字符彼此不相同 // buffer for result char ret[100]; // str: orginal string // i: index for str // n: index for ret // sz: size of the substring void combinationR(char* str, int i, int n, int sz) { if (0 == str) { printf("empty string input!\n"); return; } if (n == sz) { ret[n] = '\0'; printf("%s\n", ret); return; } for (int k = i; k < strlen(str); ++k) { ret[n] = str[k]; combinationR(str, k+1, n+1, sz); } } void combination(char* str) { for (int i = 1; i <= strlen(str); ++i) combinationR(str, 0, 0, i); }