※ 순환 알고리즘 설계(Design Recursion)
- 적어도 하나의 base case, 즉 순환되지 않고 종료되는 case가 있어야 된다.
- 모든 case는 결국 base case로 수령되어야 함.
- 암시적(implicit) 매개변수를 명시적(explicit) 매개변수로 바꿔라
- 암시적 변수와 명시적 변수?
**일반적인 반복문을 이용해서 배열탐색을 할때 아래와 같은 방식으로 구현을 한다.
여기서 명시적 변수는 n,data,target이 되고 암시적 변수는 i가 된다.(변수 선언이 되어있지 않다.)
public static int search(int n, int [] data, int target){
for(int i=0;i<n;i++){
if(data[i]==target){
return i;
}
}
return -1;
}
일반적인 상황에선 매개변수가 많아서 좋을건 없지만 Recursion에서는 이러한 암시적 변수들을 명시적 변수로
변환해 주는게 좋다. (위와 같은 배열탐색 기능을 Recursion으로 구현한 소스)
맨처음 호출할 때 뿐만 아니라 지속적으로 자신을 계속 호출할 때 까지 생각해야 되기 때문이다.
(위의 소스는 시작값이 0에서 바뀌지 않지만 아래 함수에서는 시작값이 변한다.)
public static int search(int begin, int end, int [] data, int target){
if(begin>end){
return -1;
}else if(target==data[begin]){
return begin;
}else{
return search(begin+1, end, data, target);
}
}
'플밍 is 뭔들 > 알고리즘' 카테고리의 다른 글
Recursion의 응용 [Counting Cells in a Blob] (0) | 2017.09.11 |
---|---|
Recursion의 응용 [미로찾기1] (0) | 2017.09.11 |
순환(RECURSION)의 개념과 기본 예제2 (0) | 2017.09.11 |
순환(RECURSION)의 개념과 기본 예제1 (0) | 2017.09.11 |
알고리즘의 분석, 공간 복잡도, 시간복잡도 (0) | 2017.09.11 |