2014-11-09 106 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; 
    } 

} 

我创建了一个单独的方法的代码。这里是我的我的主类..

package binarySearch; 

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

     Binary search= new Binary(); 

     search.search(1, 100,33); 

    } 
} 

在这里,我已经给下界为1,uperbound为100,这个数字我想算猜测它是33 但是,当我执行的代码我得到的算68..but应根据二进制搜索

+0

“的** **最低猜测“对于任何数字总是1. – 2014-11-10 11:52:43

回答

3

是7看看在您创建的下一个猜测行:

gussedNo=upperBound+lowerBound/2; 

由于Java的数学运算符的优先级,这条线是相同有:

gussedNo=upperBound+(lowerBound/2); 

这显然不是执行二进制搜索,因此,不是你想要的。您可以通过明确添加括号解决这个问题:

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

非常感谢..那是问题:) – jan 2014-11-09 10:31:11

1

这里是你的问题 gussedNo=upperBound+lowerBound/2;

您忘记华南简介operatots定单执行 应该 gussedNo=(upperBound+lowerBound)/2;