-
알고리즘 : recursion 1알고리즘공부 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=0gcd(q,p%q) //otherwise.int gcd (int p, int q){if(q==0)return p;elsereturn gcd(q,p%q);}'알고리즘공부' 카테고리의 다른 글
해시 테이블 (0) 2018.04.11 퀵정렬 (0) 2018.04.05 재귀, 스택 (0) 2018.04.05 배열, 연결리스트, 선택정렬 (0) 2018.04.04 binary search, 빅오표기법 (0) 2018.04.04