[알고리즘] 순환(Recursion) 03

1 minute read

순환(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);
	}
}
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);
		}
	}
}