/*#include <stdio.h>
typedef struct
{
char name[12];
int grade;
}student;
int main()
{
int n,m,i,j,max=0;
student st[100];
scanf("%d %d",&n,&m);
for(i=0;i<n;i++)
{
scanf("%s %d",st[i].name,&st[i].grade);
}
for(i=0;i<m;i++)
{
max=0;
for(j=0;j<n;j++)
{
if(st[max].grade<st[j].grade)
{
max=j;
}
}
printf("%s\n",st[max].name);
st[max].grade=0;
}
}*/
/*#include <stdio.h>
typedef struct
{
char name[12];
int g1,g2,g3;
}student;
int main()
{
int n,i,max=0,num=0;
student st[102];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s %d %d %d",st[i].name,&st[i].g1,&st[i].g2,&st[i].g3);
}
for(i=0;i<n;i++)
{
if(max<st[i].g1)
{
max=st[i].g1;
num=i;
}
}
printf("%s ",st[num].name);
int num2=0,num3=0;
for(i=0;i<n;i++)
{
if(st[i].g2>st[num].g2)
{
num2++;
}
if(st[i].g3>st[num].g3)
{
num3++;
}
}
printf("%d %d",num2+1,num3+1);
return 0;
}
재귀함수 : 자신을 다시 호출하는 함수
recursive function
(자신으로 다시 정의내리기)
f(n) : *을 n번 출력
: *출력 -> *을 n-1번 출력
#include <stdio.h>
//void f(int n)
//{
// while(n>0)
// {
// printf("*");
// n--;
// }
//}
void rec(int n)
{
if(n==0) //종료조건
{
return ;
}
printf("*");
rec(n-1); //재귀호출
}
int main()
{
rec(5);
}
리컬시브
rec(n) : n부터 1까지 출력
: n출력 -> n-1출력 ... -> 1출력
: n출력 -> rec(n-1);
#include <stdio.h>
void rec(int n)
{
if(n==0)
return ;
printf("%d\n",n);
rec(n-1);
}
int main()
{
rec(5);
}
1. 1부터 n까지 출력
2. a부터 b까지 출력
rec(n) : 1부터 n까지 출력
: 1출력 -> 2출력 ... n-1출력 -> n출력
: rec(n-1) -> n출력;
*/
/*#include <stdio.h>
void rec(int n)
{
if(n==0)
{
return;
}
rec(n-1);
printf("%d\n",n);
}
int main()
{
int n;
scanf("%d",&n);
rec(n);
}*/
/*#include <stdio.h>
void rec(int a,int b)
{
if(b==a-1)
{
return ;
}
rec(a,b-1);
if(b%2==1)
{
printf("%d ",b);
}
}
int main()
{
int a,b;
scanf("%d %d",&a,&b);
rec(a,b);
}*/
/*
#include <stdio.h>
void rec(int n)
{
if(n==1)
{
return;
}
if(n%2==0)
{
printf("%d\n",n/2);
rec(n/2);
}
else
{
printf("%d\n",3*n+1);
rec(3*n+1);
}
}
int main()
{
int n;
scanf("%d",&n);
printf("%d\n",n);
rec(n);
}
*/
/*#include <stdio.h>
rec(n) : 1부터 n까지 합 리턴
: 1 + 2 + 3 + ... +n-1 + n 리턴
: 1 + ... +n-1 + n 리턴
: rec(n-1)+n 리턴
*/
/*int rec(int n)
{
if(n==1) return 1;
return rec(n-1)*n;
}
int main()
{
int n;
scanf("%d",&n);
printf("%d",rec(n));
return 0;
}*/
/*#include <stdio.h>
int memo[100002]={};
int rec(int n)
{
if(memo[n]!=0) return memo[n];
if(n==1) return memo[1]=1;
if(n==2) return memo[2]=2;
if(n==3) return memo[3]=4;
return memo[n]=(rec(n-1)+rec(n-2)+rec(n-3))%1000;
}
int main()
{
int n;
scanf("%d",&n);
printf("%d",rec(n));
return 0;
}*/
/*메모이제이션
arr[1] = 1이 입력된 횟수
arr[i] = i에 관련된 정보
memo[i] = i번째 피보나치수 fib(i)
*/
/*#include <stdio.h>
int memo[201]={};
int rec(int n)
{
if(memo[n]!=0) return memo[n];
if(n==1||n==2) return memo[n]=1;
return memo[n]=(rec(n-1)+rec(n-2))%10009;
}
int main()
{
int n;
scanf("%d",&n);
printf("%d",rec(n));
return 0;
}*/
/*#include <stdio.h>
int memo[202]={};
int rec(int n)
{
if(memo[n]!=0) return memo[n];
if(n==1||n==2) return memo[n]=1;
return memo[n]=(rec(n-1)+rec(n-2))%10009;
}
int main()
{
int n;
scanf("%d",&n);
printf("%d",rec(n));
return 0;
}*/
#include <stdio.h>
int memo[52][52]={};
int rec(int r,int c)
{
if(memo[r][c]!=0) return memo[r][c];
if(r==1||c==1) return memo[r][c]=1;
return memo[r][c]=(rec(r-1,c)+rec(r,c-1))%100000000;
}
int main()
{
int r,c;
scanf("%d %d",&r,&c);
printf("%d",rec(r,c));
return 0;
}