C语言 求组合数,,用递归方法

C语言 求组合数,,用递归方法,第1张

举个例子 不太明白是什么组合

补充======

说白了就是求阶乘

fun是阶乘函数

直接调用即可

#include <stdio.h>

long sum=0//组合数结果

long fun(int i) //阶乘

{

If(n==1)

return 1 /*递归出口*/

else

return i*fun(i-1)/*递归体*/

}

long com(int n, int m)

{

sum=fun(m)/fun(n)*fun(m-n)

return sum

}

int main(void)

{

int m=9,n=4

printf("%l" , com(4,9))

return 0

}

def C(n,m):

    if m > n :

        return 0

    elif m == 1:

        return n

    elif n == 1:

        return 1

    else:

        return C(n-1,m-1)+C(n-1,m)

print(C(5,1))  # 5

print(C(5,2))  # 10

print(C(5,3))  # 10

print(C(5,4))  # 5

print(C(5,5))  # 1

典型的组合问题,解法有递归、回溯等等

递归法较简单,代码如下:

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")

    }

  }

}

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12167578.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存