C语言中如何用递归的方法求从n个数中取m个数的排列组合的所有情况,其中n<m,要求写出完整的程序

 我来答
碧血玉叶花
推荐于2017-09-25 · TA获得超过4976个赞
知道大有可为答主
回答量:6154
采纳率:0%
帮助的人:1692万
展开全部

典型的组合问题,解法有递归、回溯等等
递归法较简单,代码如下:

void combine(int a[], int n, int m, int b[], int M);

参数:
a 存放候选数字
n 总项数
m 取出项数
b 存放选出结果
M  = m


#include "stdio.h"
#define MAX 100
 
void combine(int a[], int n, int m, int b[], int M);
 
int main(void)
{
 int i;
 int a[MAX], b[MAX];
 
 for (i = 1; i < 100; i++)
  a[i - 1] = i;
 
 combine(a, 5, 4, b, 4);
}
 
void combine(int a[], int n, int m, int b[], int M)

 int i, j;
 
 for (i = n; i >= m; i--)
  {
   b[m - 1] = i - 1;
   if (m > 1)
    combine(a, i - 1, m - 1, b, M);
   else
    {
     for (j = M - 1; j >= 0; j--)
      printf("%d ", a[b[j]]);
     printf("\n");
    }
  }
}



其他方法可查阅相关资料。

追问
👌谢啦
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
?>

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式