2014-07-18 5 views
0

C++에서 프로젝트에 대한 재귀 적 바이너리 검색 함수를 작성 중이며 어떤 이유로 무한히 실행되어 제대로 실행되지 않습니다. 내 코드는 다음과 같습니다 :C++의 재귀 바이너리 검색 함수

int recursiveBin(const int list[], int listLength, int searchItem) 
{ 
    if(listLength == 0) 
     return -1; 

    int mid = (listLength - 1)/2; 

    if(list[mid] > searchItem) 
     return recursiveBin(list, mid - 1, searchItem); 
    else if(list[mid] < searchItem) 
     return recursiveBin(list, mid + 1, searchItem); 
    else 
     return mid; 
} 

누군가가 도와 줄 수 있습니까? 내 기능과 무한 루프가 어디에서 발생하는지 잘 모르겠습니다.

+2

디버거를 사용하십시오. – chris

+2

종이 한 장을 가져 와서 샘플 입력을 만들고 결과를 기록해 둡니다. 어느 시점에서 잘못되었는지 파악하고 수정하십시오. –

답변

2

검색 경계를 저장할 매개 변수를 하나 더 추가하십시오.

int recursiveBin(const int list[], int start, int end, int searchItem) 
{ 
    if(end > start) 
     return -1; 

    int mid = (start + end)/2; 

    if(list[mid] > searchItem) 
     return recursiveBin(list, start, mid - 1, searchItem); 
    else if(list[mid] < searchItem) 
     return recursiveBin(list, mid + 1, end, searchItem); 
    else 
     return mid; 
} 
+2

또는 상위 범위를 검색 할 때 length 매개 변수로'list + mid + 1' 및'listLength - mid-1'을 전달하십시오. –