2014-08-31 5 views
-1

왜 내 binarySearch 메서드가 원하는 대상 번호를 찾을 수 없는지 이해할 수 없습니다. 예를 들어 main 메소드의 경우, 길이가 3 인 배열 (1,2,3)과 대상 번호 인 3을 사용했습니다. 이진 검색 방법에서는 한 지점에서 시작 및 끝 변수가 2 (2, 인덱스 값). 내 코드에서 시작과 끝이 서로 같으면 소스 [mid]가 2와 같을지를 확인하는 조건이 있습니다. 그런 다음 사실을 반환합니다. 그러나 나는 그것이 사실로 돌아 오지 않는 이유를 이해하지 못합니다. 이진 검색에서 대상 번호를 찾을 수 없습니다.

함수 끝에 return false을 제거하고 코드의 또 다른 라인을 추가없이 다음 수정 컴파일러 에러 이 이후

public class Searches { 

public static boolean binarySearch(int[] source,int start, int end, int target) 
{ 
    int mid = start + (end - start)/2; 


    if (start == end) 
    { 
     if (source[mid] == target) return true; 

    } 



    if (target < source[mid]) 
     { 
      end = mid - 1; 
      binarySearch(source,start, end,target); 
     } 
    else if (target > source[mid]) 
     { 
      start = mid + 1; 
      binarySearch(source, start, end, target); 
     } 
    else return true; 




    return false; 
} 



public static void main(String[] args) 
{ 
    int[] b = {1,2,3}; 
    System.out.println(binarySearch(b,0,b.length-1, 3));  
} 

} 
+0

디버거를 사용하여 코드를 단계별로 실행하는 방법을 알고 있습니까? –

+3

당신은 실제로 재귀 호출의 결과를 사용하지 않습니다 ... – Sinkingpoint

답변

2

숙제 것으로 보인다.

변경 후 Quirliom의 코멘트가 무엇을 의미하는지 분명해질 것입니다.

관련 문제