2014-11-09 4 views
3

바이너리 검색 알고리즘을 코딩하고 있습니다. 내가 제공하는 번호를 검색하는 데 필요한 최소한의 추측을 얻고 싶습니다. 제공하는 번호가 33이면 7을 계산해야합니다. 단계.바이너리 검색 번호를 재귀 적으로 추측

Step no  number guessed result  range of possible values 
0             1-100 
1    50   too high    1-49 
2    25   too low    26-49 
3    37   too high    26-36 
4    31   too low    32-36 
5    34   too high    32-33 
6    32   too low    33-33 
7    33   correct 

은 그래서 이것은 제가 별도의 방법을 만들어이

package binarySearch; 

public class Binary { 

    int gussedNo; 
    public static int count =0; 

    void search(int lowerBound,int upperBound,int num){ 
     gussedNo=upperBound+lowerBound/2; 
     count(); 
     if(gussedNo==num){ 
      System.out.println(count);} 
      else if(gussedNo>num){ 

       upperBound=gussedNo-1; 

       search(lowerBound,upperBound,num); 

       } 
      if(gussedNo<num){ 

       lowerBound=gussedNo+1; 
       search(lowerBound,upperBound,num); 




     } 

     } 
    int count(){ 
     count=count+1; 
     return count; 
    } 

} 

내 코드입니다. 여기에 내가 1로 LOWERBOUND 주어진 100로 uperbound 한

다음
package binarySearch; 

public class MainClass { 
    public static void main (String[] args){ 

     Binary search= new Binary(); 

     search.search(1, 100,33); 

    } 
} 

내 내 주요 클래스는 ...이며, 수 나는 33 인에 대한 추측을 계산하려는하지만 코드를 실행할 때 내가 얻을 이 이진 검색

+0

"는 ** 최소 ** 추측해야한다 "어떤 숫자도 항상 1입니다. –

답변

3

에 따라 7을해야 68..but 당신이 다음 추측 만들 라인을 살펴보세요 수 : 인해 자바 수학 연산자 우선 순위에

gussedNo=upperBound+lowerBound/2; 

을,이 선은이다 갖는 것 :

gussedNo=upperBound+(lowerBound/2); 

분명히 이진 검색을 수행하지 않으므로 원하는 내용이 아닙니다. 당신은 명시 적으로 괄호를 추가하여이 문제를 해결 할 수 있습니다

여기
gussedNo = (upperBound + lowerBound)/2; 
+0

많이 고맙습니다. 그게 문제였습니다 :) – jan

1

가 문제 gussedNo=upperBound+lowerBound/2;

당신이 operatots abour 잊었

입니다 실행 주문이 gussedNo=(upperBound+lowerBound)/2;

관련 문제