알고리즘공부
알고리즘 : recursion 1
samsaraA
2017. 10. 10. 04:13
Recursion이 무한 루프에 빠지지 않기 위해서는
Base case
Recursive case
가 존재해야 한다
Recursive case에서 recursion을 반복 -> Base case로 수렴해야 함.
그렇지 않은 경우가 있기 때문에 Base case가 '존재'한다고 무한 루프가 발생하지 않는 것은 아니다.
최대공약수 구하기 : 유클리드 호제법
m>=인 두 양수 정수 m과 n에 대해서 m이 n의 배수이면 gcd(m,,n)=n이고, 그렇지 않으면 gcd(m,n)=gcd(n,m%n)이다.
int
gcd(
int
a,
int
b)
{
//반복문을 이용한 방법
int
mod = a % b;
while
(mod > 0)
{
a = b;
b = mod;
mod = a % b;
}
return
b;
}
int
gcd2(
int
a,
int
b)
{
//재귀 함수형
if(m<n){
int tmp=m;
m=n;
n=tmp;
}
if
( a % b == 0 )
return
b;
else
return
gcd2(b, a % b);
}
int
gcd3(
int
a,
int
b)
{
//삼항 연산자 축약형
return
(a % b == 0 ? b : gcd3(b,a%b));
}
좀더 단순한 버전
gcd(p,q) = p //if q=0
gcd(q,p%q) //otherwise.
int gcd (int p, int q){
if(q==0)
return p;
else
return gcd(q,p%q);
}