[알고리즘] 순환(Recursion) 03
순환(Recursion)
인프론 강의를 보면서 연습하고 기록하고 있습니다
매개변수의 명시화 : 순차탐색
public static int search (int target, int[] data, int begin, int end) {
if (begin > end) {
return -1;
}else if (target == data[begin]){
return begin;
}else {
return search (target, data, begin+1, end);
}
}
매개변수의 명시화 : 순차탐색 다른 버전
public static int searchB (int target, int[] data, int begin, int end) {
if (begin > end) {
return -1;
}else {
int mid = (begin+end)/2;
if (data[mid] == target) {
return mid;
}
int index = searchB (target, data, begin, mid-1);
if (index != -1) {
return index;
}else {
return searchB (target, data, mid+1, end);
}
}
}
매개변수의 명시화 : 최대값 찾기
public static int findMax (int[] data, int begin, int end) {
if (begin == end) {
return data[begin];
}else {
return Math.max(data[begin], findMax(data, begin+1, end));
}
}
매개변수의 명시화 : 최대값 찾기 다른 버전
public static int findMaxB (int[] data, int begin, int end) {
if (begin == end) {
return data[begin];
}else {
int mid = (begin+end)/2;
int max1 = findMaxB(data, begin, mid);
int max2 = findMaxB(data, mid+1, end);
return Math.max(max1, max2);
}
}
Binary Search
public static int binarySearch (String[] items, String target, int begin, int end) {
if (begin > end) {
return -1;
}else {
int mid = (begin+end)/2;
int compResult = target.compareTo(items[mid]);
if(compResult == 0) { //값이 같을 때
return mid;
}else if(compResult < 0) {
return binarySearch(items, target, begin, mid-1);
}else {
return binarySearch(items, target, mid+1, end);
}
}
}