當前位置:首頁 » 編程語言 » c語言證明排列組合遞歸
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言證明排列組合遞歸

發布時間: 2022-05-04 22:40:12

Ⅰ 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(" ");
}
}
}



其他方法可查閱相關資料。