Ⅰ C语言递归问题(全排列)
可以输出所有的排列,i和n表示排列的起始点和终止点比如说要排列"abcd"起点就是0,终点是3,perm(“abcd”,0,3)就可以了。
Ⅱ 求问C语言题目:排列组合(最好使用递归)
#include <stdio.h>
void swap(int &a,int &b)
{int c;
c=a; a=b; b=c;
}
void perm (int*list,int i,int n)
{
int j;
if(i==n)
{
for(j=0;j<=n;j++)
printf("%d",list[j]);
printf("\t");
}
else
{
for(j=i;j<=n;j++)
{
swap(list[i],list[j]);
perm(list,i+1,n);
swap(list[i],list[j]);
}
}
}
int main()
{int n;
int list[10]={1,2,3,4,5,6,7,8,9,0};
scanf("%d",&n);
perm(list,0,n-1);
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语言排列组合问题 用指针作为函数 采用递归
#include<stdio.h>
intn;
voidpai(intcur,int*a)
{
if(cur==n+1)
{
for(inti=1;i<=n;i++)
printf("%d",a[i]);
printf(" ");
return;
}
for(inti=1;i<=n;i++)
{
intok=1;
for(intj=1;j<cur;j++)
if(a[j]==i)
ok=0;
if(ok)
{
a[cur]=i;
pai(cur+1,a);
}
}
}
voidmain()
{
inta[15];
//排列的范围1~n
printf("请输入n:");
scanf("%d",&n);
pai(1,a);
}
Ⅳ C语言中如何用递归的方法求从n个数中取m个数的排列组合的所有情况,其中n<m,要求写出完整的程序
典型的组合问题,解法有递归、回溯等等
递归法较简单,代码如下:
void combine(int a[], int n, int m, int b[], int M);
参数:
a 存放候选数字
n 总项数
m 取出项数
b 存放选出结果
M = m
#include"stdio.h"
#defineMAX100
voidcombine(inta[],intn,intm,intb[],intM);
intmain(void)
{
inti;
inta[MAX],b[MAX];
for(i=1;i<100;i++)
a[i-1]=i;
combine(a,5,4,b,4);
}
voidcombine(inta[],intn,intm,intb[],intM)
{
inti,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(" ");
}
}
}
其他方法可查阅相关资料。