【发布时间】:2015-12-11 23:00:00
【问题描述】:
我正在尝试实现一个二进制算法,但我真的不知道如何使用递归方法编写这个程序。有人可以帮我写这个方法吗? 我已经为我写了最简单的方法:
import Prog1Tools.IOTools;
public class BinarySearch {
public static void showArray(int[] array) {
for(int x : array) System.out.print (x + " ");
System.out.println ();
}
public static void fillArray(int[] array, int arrayFirst) {
int i = 0;
while (i < array.length){
array[i] = arrayFirst;
i++;
arrayFirst++;
}
}
public static void main(String[] args) {
int l, p, s;
int arrayEnd = IOTools.readInt("Type a last number in the array : ");
int arrayFirst = IOTools.readInt("Type a first number in the array : ");
int[] nums = new int[arrayEnd+1-arrayFirst ];
fillArray(nums, arrayFirst);
showArray(nums);
System.out.println ("Could you please choose a number from the array above? " );
l = 0;
p = arrayEnd-arrayFirst;
loop: while (l <= p) {
s = (l + p) / 2;
String question = IOTools.readString("Is your number "+nums[s] + " or higher ?[You can answer: yes or higher] ");
switch (question){
case "yes":
System.out.println("I found a number "+nums[s]+" Your number has an index "+s +" in the array");
break loop;
case "higher":
l = s + 1;
break;
}
}
}
}
我试过这样的方法,但它不起作用
public static int recursiveBinarySearch(int[] sortedArray, int start, int end, String question) {
if (start < end) {
int mid = start + (end - start) / 2;
if (question=="higher") {
return recursiveBinarySearch(sortedArray, start, mid, question);
} else if (question=="lower") {
return recursiveBinarySearch(sortedArray, mid+1, end , question);
} else {
return mid;
}
}
return -(start + 1);
}
【问题讨论】:
-
可能和这个问题一样:stackoverflow.com/questions/19012677/…
-
您应该使用
.equals比较字符串,而不是==。见this question。 -
我认为您的问题可能更多是关于需要了解递归?
-
你能举个例子解释一下吗? :)
-
看看你使用
if (question.equals("higher"))和if (question.equals("lower"))是否有效。而且您还需要更新问题变量。