我试图实现二进制算法,但我真的不知道如何使用递归方法编写此程序。有人可以帮我吗,请写这个方法? 我已经为我写了最简单的方法:
<script id="someTemplate" type="text/x-handlebars-template">
<div class="editStuff">
<span \{{#if aThing}} data-someKey="\{{anotherThing}}" \{{/if}}>
\{{aThirdThing}}
</span>
</div>
</script>
我试过这种方法,但它没有工作
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;
}
}
}
}
答案 0 :(得分:0)
public boolean binaryS(int A[],int left, int right, int x){
int middle;
//check if there is any array left to search
if (left > right) return false;
//determine the middle of this array section
middle = (left + right) / 2;
//is the middle what we are looking for?
if (A[middle] == x) return true;
//search the half of the array that might contain x
if (A[middle] > x) { //search for x to the left
return binaryS(A, left, middle - 1, x);
} else { //search for x to the right
return binaryS(A, middle + 1, right, x);
}
}
答案 1 :(得分:0)
如果您想要用户输入(并保留您的结构):
public static int recursiveBinarySearch(int[] sortedArray, int start, int end) {
if (start < end) {
int mid = (start + end) / 2;
String question = IOTools.readString("Is your number compared to "+sortedArray[mid] + " lower or higher?[You can answer: equal, lower or higher] ");
if (question.equals("higher")) {
return recursiveBinarySearch(sortedArray, mid+1, end, question);
} else if (question.equals("lower")) {
return recursiveBinarySearch(sortedArray, start, mid-1, question);
} else {
return mid;
}
}
System.out.println("Something went wrong...");
return -1;
}