赵亮是哪里人:c语言递归法

来源:百度文库 编辑:中科新闻网 时间:2024/05/05 09:49:24
利用递归法找出从自然数1,2,3,,,n.中任取r个数的所有组合.

/*先输入n再输入r;
n不要超过30
程序列出所有组合情况,并且计数

样例输入:
4 3

样例输出:
1 2 3
2 2 4
3 3 4
4 3 4

*/
#include<stdio.h>

#define MAXN 31
int res[MAXN];
int N,M,count;

void outres()
{

int i;

count++;
printf("%d",count,res[1]);
for (i=2; i<=M; i++)
printf(" %d",res[i]);
printf("\n");
}

void combination(int no)
{
int i,k;
if (no>M)
outres();
else
{
k=res[no-1]+1;

for (i=k; i<=N-M+no; i++)
{
res[no]=i;
combination(no+1);
}
}
}

int main()
{
scanf("%d%d",&N,&M);
count = 0;
res[0]=0;
combination(1);
return 0;
}

void sort(char *str, int length)
{
int max=0,i;
char c='\0';
if(length<=1) return;
else
{
for(i=0;i<length;i++)
{
if(str[i]>c)
{
c=str[i];
max=i;
}
}
c=str[0];
str[0]=str[max];
str[max]=c;
sort(str[1],length-1);
}
}

#include <stdio.h>
int fun(int n)
{
if(n==0) return 1;
else return fun(n-1)*n;
}
main()
{
int n,r;
int ans=0;
printf("input n\n");
scanf("%d",&n);
printf("input r\n");
scanf("%d",&r);
ans=(int)(fun(n)/(fun(n-r)*fun(r))) ;
printf("answer is %d\n",ans);
getch();
}