[英]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.