Ⅰ 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(" ");
}
}
}
其他方法可查閱相關資料。