20250606
/*
#include <stdio.h>
int cr[31]={}; //분자
int cn[31]={}; //분모
int Nc(int n,int n2,int c,int m) //cn[] 배열에 r-- 값 추가
{
if(n==c)
{
cn[m]=n;
return 0;
}
cn[m]=n;
n--;
return Nc(n,n2,c,m);
}
int Rc(int r,int r2,int c,int m) //cr[] 배열에 r-- 값 추가
{
if(r==c)
{
cr[m]=r;
return r2;
}
cr[m]=r;
m++;
r--;
return Rc(r,r2,c,m);
}
int Rf(int r,int r2,int m) //cr[] 배열에 r-- 값 추가
{
if(r==0)
{
return r2;
}
cr[m]=r;
m++;
r--;
return Rf(r,r2,m);
}
int Nf(int n,int n2,int m) //cn[] r-- 값 배열에 추가
{
if(n==0)
{
return n2;
}
cn[m]=n;
n++;
n--;
return Nf(n,n2,m);
}
void dev(int m,int m1) //cr 분자 배열 약분, cr 분자 배열 약분 후 cn 분모 배열 1로 바꾸기
{
if(cn[m]==0) //분모 배열이 이제 계산할게 더이상 없는가?
{
return;
}
if(cr[m1]==0) //분자 배열이 분모와 다 한 바퀴씩 약분 했는가?
{
m1=1;
m++;
}
if(cn[m]%cr[m1]==0) //cn 배열, cr 배열 약분
{
cn[m]=cn[m]/cr[m1];
cr[m1]=1;
printf("%d, ",cn[m]);
}
return dev(m,m1+1);
}
int f(int m,int n)
{
if(cn[m]==0)
{
return n;
}
n=n*cn[m];
return f(m+1,n);
}
int main()
{
int n,n2=1,c,r,r2=1,m=1,m1=1;
scanf("%d %d",&n,&r);
if(n>r)
{
c=n-r; //c에 변수 추가
c++; //~ 가 더 크다면을 위한 변수 (Nc void 함수 에서 'n 이 c 와 같다면?' 인 코드, Nc void 함수는 cn[] 배열에 방금 전 코드가 될때까지 반복하여 r-- 값 계산 후 배열에 값 저장
n=Nc(n,n2,c,m); //Nc void 함수 실행
m=1; //m 값 초기화
c=Rf(r,r2,m); //cr[] 배열에 r-- 값 추가
m=1; //m 값 초기화
dev(m,m1); //cr 분자 배열 약분, cr 분자 배열 약분 후 cn 분모 배열 1로 바꾸기
m=1;
n=1;
n=f(m,n);
}
else
{
c=r-n; //c에 변수 추가
c++; //~ 가 더 크다면을 위한 변수 (Nc void 함수 에서 'n 이 c 와 같다면?' 인 코드, Nc void 함수는 cn[] 배열에 방금 전 코드가 될때까지 반복하여 r-- 값 계산 후 배열에 값 저장
n=Rc(r,r2,c,m); //Rc void 함수 실행
m=1; //m 값 초기화
c=Nf(n,n2,m); //Nf void 함수 실행
m=1; //m 값 초기화
dev(m,m1); //cr 분자 배열 약분, cr 분자 배열 약분 후 cn 분모 배열 1로 바꾸기
m=1;
n=1;
n=f(m,n);
}
printf("\n%d",n);
return 0;
}
*/
#include <stdio.h>
int f(int m,int n,int c)
{
if(n<c)
{
printf("%d ",m);
return m;
}
m=m*n;
return f(m,n-1,c);
}
int Fc(int m,int c)
{
if(c==0)
{
printf("%d ",m);
return m;
}
m=m*c;
return Fc(m,c-1);
}
int main()
{
int n,c,r,m=1,co,f1,c1;
scanf("%d %d",&n,&r);
if(n<r)
{
c=r;
r=n;
n=c;
}
c=n-r;
f1=f(m,n,c);
c1=Fc(m,c);
co=f1/c1;
printf("%d",co);
}




