2013-11-09 2 views
0

다음은 재귀 적 이진 검색을위한 나의 방법입니다. 이것은 정렬 된 목록에서 전화 번호를 찾는 것으로 가정되지만 파일의 첫 번째 번호에 대해서만 작동하며 다른 모든 것이 발견되지 않는다고 말합니다. 아무도 내가 틀린 것을 알아낼 수있게 도와 줄 수 있습니까?재귀 이진 검색 프로그램

static int binary (String num, String[] phone, int low, int high) 
{ 
    if ((high - low) <= 1) 
    { 
     if (phone [low].equals (num)) 
     { 
      return low; 
     } 
     else if (phone [high].equals (num)) 
     { 
      return high; 
     } 
     else 
     { 
      return -1; 
     } 
    } 
    int mid = (low + high)/2; 
    if (phone [mid].compareTo (num) > 0) 
    { 
     return binary (num, phone, 0, mid); 
    } 
    else if (phone [mid].compareTo (num) < 0) 
    { 
     return binary (num, phone, mid, high); 
    } 
    else 
    { 
     return -1; 
    } 
} 

답변

0

난 당신이 또한

if (phone [mid].compareTo (num) > 0) 
{ 
    return binary (num, phone, low, mid-1); 
} 
else if (phone [mid].compareTo (num) < 0) 
{ 
    return binary (num, phone, mid+1, high); 
} 

싶은 생각, 당신은 필요한 것보다 더 많은 검사를 수행합니다

static int binary (String num, String[] phone, int low, int high) 
{ 
    if(low > high) 
    { 
     return -1; 
    } 
    int mid = (low + high)/2; 
    int compare = phone[mid].compareTo(num); 
    return compare > 0 ? binary (num, phone, low, mid-1); 
     : compare < 0 ? binary (num, phone, mid+1, high); 
     -1; 
}