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

最好有点讲解,,麻烦大神们码一下代码吧。。。
就是n个数取k个数有几种情况,,Ckn,,与之相对的是排列数

举个例子 不太明白是什么组合数
补充======
说白了就是求阶乘
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;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-03-21
int Com(int x,int y)//求组合数C(x,y)
{if (y==0 || x==y)
return 1;
else
return Com(x-1,y)+Com(x-1,y-1);
}追问

zylib库里有com这个函数吗??

追答

没有吧…………

本回答被提问者采纳

C语言 求组合数,,用递归方法
说白了就是求阶乘 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 ...

求组合数infunctionmain怎么解决
组合数可以使用函数递归来求解。递归是指一个函数在其内部调用自身的过程。对于组合数 C(n,k),我们可以用递归的方式来求解:当 k=0 或 k=n 时,C(n,k) = 1;当 k>0 且 k<n 时,C(n,k) = C(n-1,k) + C(n-1,k-1)。下面是一个用递归方式求解组合数的例子。其中,函数名称...

C语言递归求组合数,自己分析只得出(1)5,4,3(2)4,3,2(1)3,2,1运行结果...
这是一个递归求组合的算法,递归会把所有条件的"遍历"一次,根据要求处理。else 是最终k<=1时输出,不用解释。关键看if 里面 comb(int m,int k) 有个for 使得a[k]=i; i的取值可以为 m-k,所以对于输入5 3 对应的是a[0]取为5 -3 a[1] 4-2,a[2] 3-1,通过递归输出了所...

计算并输出组合数Cmn……不会打……要求递归……谢谢
function c(a,b:integer):real;beginc:=fac(a)\/fac(b)*fac(a-b)end;beginwriteln('c(9,3)=',c(9,3));writeln('c(8,5=',c(8,5));end.<\/P><P>四、递归函数或过程调用它本身,称为递归。[例1]、用递归计算n! program fac_n(input,output);varn:integer;function fac(n:integer):integer...

c语言 用递归函数求组合数并使输出结果为comb(2,1)=2的形式
include <stdio.h>int comb(int n, int m){ if (m==1)return n; if (n==m||m==0)return 1; return comb(n-1, m-1)+comb(n-1, m);}int main(){ printf ("%d\\n", comb(2, 1)); return 0;}

如何快速地求出一个数的组合数?
C(n,k) = C(n-1,k-1) + C(n-1,k)该公式表示,从n个元素中取出k个元素的组合数,等于从n-1个元素中取出k-1个元素的组合数,加上从n-1个元素中取出k个元素的组合数。通过递归地使用该公式,可以计算出任意组合数的值。杨辉三角法 杨辉三角是一种由二项式系数构成的三角形。在杨辉三角...

C#求组合数问题,请问大家这里为什么要这么写,谢谢大家了!
参数 int[] b是一个索引数组 这段代码的意义就是递归简化... 比如C(6,3) 规约成随机抽取数x+C(5,2) 再规约成随机抽取数x+随机抽取数y+C(4,1) 直到m=1的时候 问题就简化成(n-m+1)中选1的推演了 当第一次抽取x的时候 对b[2]进行赋值索引 当第二次抽取y的时候 对b[1]赋值...

C语言编程题
另一种是建立一个数学模型,采用组合数的思想解这个问题,这样设计出程序只是一个数学计算过程,组合数计算最快的算法是O(N),在加上求和,算法时间复杂度为O(N^2)左右。一种简单的递归模拟方法:void decision::make_decision(int step, int restlevel) { \/\/走法:走一步或两步 if(restleve...

在C++中怎么编出求组合数的代码?且保证结果不溢出。
目前来说有三种方法可以做到算组合数,第一种是先算出两个数的阶乘,之后再算组合数,但是很容易溢出。第二种是通过组合数公式进行递归计算,但是时间复杂度大,也会容易溢出。第三种是我个人比较推荐也自己在用的,就是杨辉三角形法,使用一个二维数组来表示杨辉三角形,然后将数组里面的值计算出来...

c语言,求0~7中任意随机取5个不同的数的组合算法
void main(){ int i = 0, j = 0;int a[5];srand((unsigned)time(NULL));for (i = 0; i < 5; ++i){ a[i] = rand()%8;for (j = 0; j < i; ++j){ if (a[j] == a[i]) break;} if (j < i){ i--;} } printf("此次组合为:");for (i = 0; i < 5...

相似回答