이진 탐색 재귀함수로 풀이

이은택·2021년 11월 17일
0

알고리즘

목록 보기
11/15
post-thumbnail

문제 출처: 코드잇


1차 성공

  • 구상 15분
  • 구현 13분
    def binary_search(element, some_list, start_index=0, end_index=None):
        # end_index가 따로 주어지지 않은 경우에는 리스트의 마지막 인덱스
        if end_index == None:
            end_index = len(some_list) - 1
        
        # 코드를 작성하세요.
        
        middle_index = (start_index + end_index) // 2
        
        # base case
        if some_list[middle_index] == element:
            return middle_index
        elif end_index < start_index: 📌
            return None
        
        # recursive case
        elif element < some_list[middle_index]:
            end_index = middle_index -1
            return binary_search(element, some_list, start_index, end_index)
        elif some_list[middle_index] < element:
            start_index = middle_index +1
            return binary_search(element, some_list, start_index, end_index)
        
        
        
        
    print(binary_search(2, [2, 3, 5, 7, 11]))
    print(binary_search(0, [2, 3, 5, 7, 11]))
    print(binary_search(5, [2, 3, 5, 7, 11]))
    print(binary_search(3, [2, 3, 5, 7, 11]))
    print(binary_search(11, [2, 3, 5, 7, 11]))

✔막힌부분 - 문제점, 이해

  • 문제점
    📌 elif start_index == end_index and some_list[middle_index] != element: 조건문이 왜 문제일까? RecursionError: maximum recursion depth exceeded in compari 가 발생했는데 다른 조건인 elif end_index < start_index: 로 변경하니 문제 해결이 되었으나 에러원인을 모르고 넘어 가려니 찜찜하다. 나중에 한번 더 생각해보자
  • 이해
profile
도전!

0개의 댓글