【问题标题】:binary search guessing number recursively二分查找递归猜数
【发布时间】:2014-11-16 17:29:54
【问题描述】:

我正在编写一个二分搜索算法,我想获得搜索我提供的数字所需的最小猜测数。假设我提供的数字是 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,上限为 100,我想猜测的数字是 33。 但是当我执行代码时,我得到的计数是 68..但根据二进制搜索应该是 7

【问题讨论】:

  • “任何数字的最小猜测”总是1。

标签: java recursion binary-search


【解决方案1】:

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

gussedNo=upperBound+lowerBound/2;

由于 Java 中的数学运算符优先级,这一行与具有相同:

gussedNo=upperBound+(lowerBound/2);

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

gussedNo = (upperBound + lowerBound) / 2;

【讨论】:

    【解决方案2】:

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

    您忘记了操作员的订单执行 它应该是 gussedNo=(upperBound+lowerBound)/2;

    【讨论】:

      猜你喜欢
      • 2015-12-16
      • 2020-11-13
      • 2021-04-08
      • 2015-12-02
      • 2011-02-08
      • 1970-01-01
      • 2012-12-19
      • 1970-01-01
      • 2023-04-06
      相关资源
      最近更新 更多