Java 递归方法中跟踪比较的递增语句

Java 递归方法中跟踪比较的递增语句,java,arrays,recursion,increment,binary-search,Java,Arrays,Recursion,Increment,Binary Search,我试图构造一个递归二进制搜索方法,该方法在可比较对象的排序数组中搜索感兴趣的对象。这是一个较大算法的一部分,该算法搜索已排序数组的集合,并查找集合中所有数组的公共元素。目标是使算法的搜索/比较部分尽可能高效。线性解决方案应该是可能的。方法如下: private static boolean BinarySearch(Comparable[] ToSearch, Comparable ToFind, int first, int last){ boolean found = false;

我试图构造一个递归二进制搜索方法,该方法在可比较对象的排序数组中搜索感兴趣的对象。这是一个较大算法的一部分,该算法搜索已排序数组的集合,并查找集合中所有数组的公共元素。目标是使算法的搜索/比较部分尽可能高效。线性解决方案应该是可能的。方法如下:

private static boolean BinarySearch(Comparable[] ToSearch, Comparable ToFind, int first, int last){
    boolean found = false;
    int mid = first + (last - first) / 2;
    comparisons++;
    if(first > last){
        found = false;
    }
    else if(ToFind.compareTo(ToSearch[mid]) == 0){
        found = true;
        comparisons++;
    }
    else if(ToFind.compareTo(ToSearch[mid]) < 0) {
        found = BinarySearch(ToSearch, ToFind, first, mid - 1);
        comparisons++;
    }
    else{
        found = BinarySearch(ToSearch, ToFind,mid + 1, last);
        comparisons++;
    }
    return found;
}
private static boolean BinarySearch(可比[]到搜索,可比到查找,int-first,int-last){
布尔值=false;
int mid=first+(last-first)/2;
比较++;
如果(第一个>最后一个){
发现=错误;
}
else if(ToFind.compareTo(ToSearch[mid])==0){
发现=真;
比较++;
}
else if(ToFind.compareTo(ToSearch[mid])<0){
found=BinarySearch(ToSearch,ToFind,first,mid-1);
比较++;
}
否则{
已找到=二进制搜索(ToSearch、ToFind、mid+1、last);
比较++;
}
发现退货;
}

我遇到的问题是通过递归跟踪比较的数量。因为我必须计算计算为false和true的比较,所以我尝试将comparison incrementing语句放在每个selection语句中,但这不起作用,因为如果该语句的计算结果为false,则该语句不会递增。我也不能将它们放在选择语句之间,因为这会给我其他没有if erros的语句。我想知道在搜索中使用递归是否是个坏主意,但我想相信这是可能的。如果有任何帮助,我们将不胜感激。

也许您可以在每个
if
块中设置一个变量,并将其添加到最后

private static boolean BinarySearch(Comparable[] ToSearch, Comparable ToFind, int first, int last){
    boolean found = false;
    int newComparisons = 0;
    int mid = first + (last - first) / 2;
    if(first > last){
        found = false;
        newComparisons = 1;
    }
    else if(ToFind.compareTo(ToSearch[mid]) == 0){
        found = true;
        newComparisons = 2;
    }
    else if(ToFind.compareTo(ToSearch[mid]) < 0) {
        found = BinarySearch(ToSearch, ToFind, first, mid - 1);
        newComparisons = 3;
    }
    else{
        found = BinarySearch(ToSearch, ToFind,mid + 1, last);
        newComparisons = 3;
    }
    comparisons += newComparisons;
    return found;
}
private static boolean BinarySearch(可比[]到搜索,可比到查找,int-first,int-last){
布尔值=false;
int=0;
int mid=first+(last-first)/2;
如果(第一个>最后一个){
发现=错误;
纽科姆帕里森=1;
}
else if(ToFind.compareTo(ToSearch[mid])==0){
发现=真;
新的巴黎=2;
}
else if(ToFind.compareTo(ToSearch[mid])<0){
found=BinarySearch(ToSearch,ToFind,first,mid-1);
新的巴黎=3;
}
否则{
已找到=二进制搜索(ToSearch、ToFind、mid+1、last);
新的巴黎=3;
}
比较+=新的比较;
发现退货;
}

您可以直接执行增量,例如
比较+=3的else
中添加code>,但是请向上投票。这不是个坏主意。尽管我会使用Andreas的语句:comparations+=3,因为我的类中有另一个方法返回比较值,以根据查询数组中的条目数跟踪效率。我要试试这个。