나는 거의 쓸모없이이 기능을 이해하려고 노력하고있다. 바이너리 검색이 무엇인지 완전히 이해하지만 재귀라는 개념은 처음이지만 약간의 이해가 있습니다. 처음에는 함수를 호출 할 때 low와 high의 기본값이 무엇인지 이해하지 못합니다. 현재로서는 번호가 들어있는 검색 공간을 포함하는 것입니다. 그러나 목록 길이를 모르는 경우 또는 목록 길이가 확실하지 않은 경우 어떻게해야합니까? 그렇지 않으면, 나는 여기에서 진행되는 재귀 과정과 낮고 높은 논증에 대한 필요성을 이해합니다. 아래의 기능은 필자가 복용하고있는 온라인 코스의 노트에 제공됩니다. 그러나, 그것은 강의에서 설명되지 않았으며 그것에 관한 문서화 또는 참조를 포함하지 않습니다.파이썬에서 재귀 바이너리 검색
def bSearch(L, e, low, high):
if high - low < 2:
return L[low] == e or L[high] == e
mid = low + int((high-low)/2)
if L[mid] == e:
return True
if L[mid] > e:
return bSearch(L, e, low, mid-1)
else:
return bSearch(L, e, mid+1, high)
L = [1,3,6,15,34,84,78,256]
print bSearch(L, 15, 4, 8)
print bSearch(L, 84, 0, 6)
출력 :
False
True
고맙습니다. 테스트를 실행하여 이것을 알아 냈습니다. 그러나 목록에서 값의 목록 또는 크기의 크기를 모르는 경우 더 직접적인 질문이 무엇입니까? 이 기능에 대한 제한입니까 아니면 주요 개념이 누락 되었습니까? – Jordan
전체 공간을 검색하는 경우 목록의 어느 위치에 있는지 알 필요가 없습니다. 리스트의 크기는'len (L)'에서 쉽게 얻을 수 있습니다. 이 유형의 검색을 포함하도록 내 대답을 편집했습니다. – huu
오, 정말 고마워요! 그것이 내가 찾고 있었던 것이다. 나는 그것이 가능하다는 것을 알았다. 그러나 나는 단지 공백을 그리는 것이었다고 생각한다. 또한 대부분의 경우 true 또는 false가 아닌 인덱스를 반환하는 것이 더 유용 할 것입니다. – Jordan