c语言递归函数组合数 c语言求组合数递归高效

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个数的不同组合数

#includestdio.h

int n,k,a[20],b[20]={0};

void work(int k1)

{int i,j,t;

t=k1==0?0:a[k1-1]+1;

for(i=t;in;i++)

{

if(!b[i])

{

a[k1]=i;

b[i]=1;

if(k1==k-1)

{

for(j=0;jk;j++)

printf("%d ",a[j]+1);

printf("\n");

}

else

work(k1+1);

b[i]=0;

}

}

}

main()

{

int i;

scanf("%d %d",n,k);

for(i=0;in;i++)a[i]=i;

work(0);

getch();

return 0;

}

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 sum;

}

int main(void)

{

int m=9,n=4;

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

return 0;

}

C语言递归求组合数,自己分析只得出(1)5,4,3(2)4,3,2(1)3,2,1运行结果如图片,请帮忙分析递归运行过程?

for (i=m;i=k;i--)

{ a[k]=i;

if (k1)

comb(i-1,k-1);

else

{

counts++;

for (j=a[0];j0;j--)

printf("%4d",a[j]);

printf("\n");

}

}

}

这是一个递归求组合的算法,递归会把所有条件的"遍历"一次,根据要求处理。

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,通过递归输出了所有组合。

进一步学习,下面这篇文章不错

C语言类问题.用递归法求从n个人中选择k个人组成一个委员会的不同组合数.

#include stdio.h

#include stdlib.h

int Comb(int n, int k)

{

if (n==k || k==0)

return 1; //边界值

else

return Comb(n-1, k)+Comb(n-1, k-1);    

}

void main()

{

int n, k;

printf("请输入总人数 n: ");

scanf("%d", n);

printf("请输入委员会人数 k: ");

scanf("%d", k);

if (k0 || n0 || kn) //输入数据的合法性判断

printf("输入不合法!");

else

printf("组合数有 %d 个!",Comb(n, k));

system("pause");

}


分享文章:c语言递归函数组合数 c语言求组合数递归高效
本文URL:http://ybzwz.com/article/dodjcip.html