如何用递归实现从N个不同的字母中选出M个的所有组合,并打印?
菜鸟算法问题,求解决:
要求,给定任意数组,例如 char arr[4]={'a', 'b', 'c', 'd'}; 打印出任意m个元素的组合,
例如m=3, 则要按照以下顺序输出:abc abd acd bcd
要求用c语言递归实现。各位高手帮忙想想,先谢过。
[解决办法]
#include<stdio.h>#include<stdlib.h>void func(char *f, char *l, char res[], const int M, int cnt = 0){ int i; if (f == l || M <= cnt) { if (M == cnt) { for (i = 0; i < M; ++i) { printf("%c ", res[i]); } printf("\n"); } } else { if (f < l) { res[cnt] = *f; func(f + 1, l, res, M, cnt + 1); func(f + 1, l, res, M, cnt); } }}int main(){ char src[] = {'a', 'b', 'c', 'd'}; char res[sizeof(src) / sizeof(src[0])]; func(src, src + sizeof(src) / sizeof(src[0]), res, 3); system("pause"); return 0;}