/*
#include <stdio.h>
int n, a, b, d[1010];
int maxi(int a, int b)
{
int i,sum=a;
for(i=a ; i<=b ; i++)
{
if(d[i]>d[sum])
{
sum=i;
}
}
return sum;
}
int main()
{
scanf("%d", &n);
for(int i=1; i<=n; i++)
{
scanf("%d", &d[i]);
}
scanf("%d%d", &a, &b);
printf("%d\n", maxi(a, b));
}
#include <stdio.h>
int n, k, d[1010];
int lower_bound(int a)
{
int i;
for(i=1 ; i<=n ; i++)
{
if(d[i]>=a)
{
return i;
}
}
return n+1;
}
int main()
{
scanf("%d", &n);
for(int i=1; i<=n; i++)
{
scanf("%d", &d[i]);
}
scanf("%d", &k);
printf("%d\n", lower_bound(k));
}
재귀함수
re-cursive
재귀함수의 특징
1. 코드가 짧고 쉬워 but 어려워
2. 말이 되는데, 왜 되는거지?
재귀함수의 정의
1. 함수 내에서 자신을 다시 호출하는 함수
2. 자신으로 다시 정의내리는 함수
재귀함수의 필요성
1. 코드를 짧게하려고 (for me)
f(n) : n ~1 출력
: n출력 -> n-1 ~ 1 출력
: n출력 -> f(n-1);
#include <stdio.h>
void f(int x)
{
// 종료조건
if(x==0)
{
return ;
}
//재귀호출
f(x-1);
printf("%d ",x);
}
int main()
{
f(10); // main함수에서 f함수를 호출
return 0;
}
f(a,b) : a ~ b 출력
*/
//#include <stdio.h>
//void f(int i, int j)
//{
// if(i==j+1)
// {
// return ;
// }
// if(i%2==1)
// {
// printf("%d ",i);
// }
// f(i+1,j+0);
//}
//int main()
//{
// int a,b;
// scanf("%d %d",&a,&b);
// f(a,b);
//}
/*
f(n) : 1 ~ n 합 리턴
: 1 ~ n-1 합 + n 리턴
: f(n-1) + n 리턴
f(3) : return f(2) + 3;
f(2) : return f(1) + 2;
f(1) : return 1;
x=1 x=2
f(x) f(x)
return 1; return 3;
*/
#include <stdio.h>
int sum=1;
int f(int i)
{
if(i==0)
{
return sum;
}
sum=sum*i;
f(i-1);
}
int main()
{
int a;
scanf("%d",&a);
printf("%d",f(a));
return 0;
}