Java 递归二进制搜索猜测数

Java 递归二进制搜索猜测数,java,recursion,binary-search,Java,Recursion,Binary Search,我正在编写一个二进制搜索算法,我想得到搜索我提供的数字所需的最小猜测数。假设我提供的数字是33,那么它应该计算7步 Step no number guessed result range of possible values 0 1-100 1 50 too high 1-49 2 2

我正在编写一个二进制搜索算法,我想得到搜索我提供的数字所需的最小猜测数。假设我提供的数字是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;
    }

}
这里,我给出了lowerbound为1,uperbound为100,我想计算的猜测数是33。
但是当我执行代码时,我得到的计数是68。但是根据二进制搜索,它应该是7。看看创建下一个猜测的行:

gussedNo=upperBound+lowerBound/2;
由于Java中数学运算符的优先级,此行与以下内容相同:

gussedNo=upperBound+(lowerBound/2);
这显然不是执行二进制搜索,因此,不是您想要的。可以通过显式添加括号来解决此问题:

gussedNo = (upperBound + lowerBound) / 2;
这是你的问题
gussedNo=上限+下限/2

你忘了命令的执行 应该是
gussedNo=(上限+下限)/2

任何数字的“最小猜测”始终为1。
gussedNo = (upperBound + lowerBound) / 2;