import java.util.Scanner;
public class BinarySearchRecursion {
// 2진검색 (재귀)
static int binarySearch(int[] arr, int start, int end, int key) { // (배열, 시작 인덱스, 끝 인덱스, 찾을 값)
if (start <= end) {
int mid = (start + end) / 2; //중앙값
if (arr[mid] == key) { // 중앙값이 찾을 값과 같다면 mid 리턴
return mid;
} else if (arr[mid] > key) {
return binarySearch(arr, start, mid -1, key); //중앙값이 찾으려는 값보다 크면 끝 인덱스를 중앙값-1로 설정
} else if (arr[mid] < key){
return binarySearch(arr, mid + 1, end, key); //중앙값이 찾으려는 값보다 작으면 시작 인덱스를 중앙값+1로 설정
}
}
return -1; //찾을 값이 없으면 -1
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] arr = {1,3,5,7,9,11,13,14,16,17,18}; //정렬이 되어 있어야 한다.
for(int a : arr) {System.out.print(a+" ");} // 어레이 출력
System.out.println("\n찾을 값을 입력하세요 : ");
int user_input = sc.nextInt();
//만든 2진 검색 메서드 사용
System.out.println(binarySearch(arr, 0, arr.length-1, user_input) + "번째 인덱스에 존재");
}
}