繁体   English   中英

二进制搜索猜测数字递归

[英]binary search guessing number recursively

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

    }
}

在这里,我将lowerbound作为1,uperbound作为100,并且我想要计算的数字是33。但是当我执行代码时,我得到的计数为68 ..但是根据二分搜索,它应该是7

看看你创建下一个猜测的行:

gussedNo=upperBound+lowerBound/2;

由于Java中的数学运算符优先级,此行与以下内容相同:

gussedNo=upperBound+(lowerBound/2);

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

gussedNo = (upperBound + lowerBound) / 2;

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

你忘了abour operatots命令执行它应该是gussedNo=(upperBound+lowerBound)/2;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM