返回java元素索引的递归方法

返回java元素索引的递归方法,java,recursion,methods,iteration,Java,Recursion,Methods,Iteration,我试图在排序数组中搜索我选择的数字。如果数组包含这个数字,我想返回每次出现的索引。我需要写方法来完成这项任务。一个递归,一个迭代。我已经开始了下面的递归方法 public int findRecursive(T anEntry) { return binarySearchRecursive(0, length - 1, anEntry); } private int binarySearchRecursive(int first, int last, T desiredItem) {

我试图在排序数组中搜索我选择的数字。如果数组包含这个数字,我想返回每次出现的索引。我需要写方法来完成这项任务。一个递归,一个迭代。我已经开始了下面的递归方法

public int findRecursive(T anEntry) {
    return binarySearchRecursive(0, length - 1, anEntry);
}

private int binarySearchRecursive(int first, int last, T desiredItem) 
{
    int position = 0;
    int mid = (first + last) / 2;
    if (first > last ||  (desiredItem.compareTo(list[position]) != 0))
        position =  -(position + 1);
    else if (desiredItem.equals(list[mid]))
        position = mid;
    else if (desiredItem.compareTo(list[mid]) < 0)
        position = binarySearchRecursive(first, mid -1, desiredItem);
    else 
        position = binarySearchRecursive(mid + 1, last, desiredItem);
    return position;
}
public int find草书(T anEntry){
返回binarySearchRecursive(0,长度-1,输入);
}
私有int二进制搜索递归(int first,int last,T desiredItem)
{
int位置=0;
int mid=(第一个+最后一个)/2;
if(first>last | |(desiredItem.compareTo(list[position])!=0))
位置=-(位置+1);
else if(desiredItem.equals(list[mid]))
位置=中间位置;
else if(desiredItem.compareTo(list[mid])<0)
position=binarySearchRecursive(first,mid-1,desiredItem);
其他的
位置=二进制搜索递归(中间+1,最后一个,desiredItem);
返回位置;
}
以下是应预期的阵列/输出

public static void main(String[] args) {
    AList<Integer> testList = new AList<Integer>();
    testList.add(1);
    testList.add(3);
    testList.add(2);
    testList.add(5);
    testList.add(7);
    testList.add(2);
    testList.add(4);

 //* question 5
     //* should output 1, -8, 4
     // my out is returning -1, -1, -1


    testList.sort();
    System.out.println(testList.findRecursive(2));
    System.out.println(testList.findRecursive(8));
    System.out.println(testList.findRecursive(4));
    System.out.println("");
publicstaticvoidmain(字符串[]args){
AList testList=新的AList();
添加(1);
增加(3);
增加(2);
增加(5);
增加(7);
增加(2);
增加(4);
//*问题5
//*应该输出1,-8,4
//我的输出返回-1,-1,-1
testList.sort();
System.out.println(testList.findRecursive(2));
System.out.println(testList.findRecursive(8));
System.out.println(testList.findRecursive(4));
System.out.println(“”);

为了获得所需的输出,递归方法需要做一些小的更改-

private int binarySearchRecursive(int first, int last, T desiredItem) 
{
    int position = 0;
    int mid = (first + last) / 2;
    if (first > last)
        position =  -(last + 1);
    else if (desiredItem.equals(list[mid]))
        position = mid;
    else if (desiredItem.compareTo(list[mid]) < 0)
        position = binarySearchRecursive(first, mid -1, desiredItem);
    else 
        position = binarySearchRecursive(mid + 1, last, desiredItem);
    return position;
}
private int-binarySearchRecursive(int-first,int-last,T-desiredItem)
{
int位置=0;
int mid=(第一个+最后一个)/2;
如果(第一个>最后一个)
位置=-(最后一个+1);
else if(desiredItem.equals(list[mid]))
位置=中间位置;
else if(desiredItem.compareTo(list[mid])<0)
position=binarySearchRecursive(first,mid-1,desiredItem);
其他的
位置=二进制搜索递归(中间+1,最后一个,desiredItem);
返回位置;
}

这两个更改都在终止区域。当first>last搜索完毕后,您不需要对所需项目进行比较。此外,在终止区域中,您应该返回
-(last+1)
,而不是
-(position+1)
,因为position将始终为0。

您的问题是什么?您的意思是
int mid=(first+last)/2;
?我不太明白。请你重新措辞这个问题好吗?我重新措辞了这个问题。现在它更有意义了吗?不,查找草书的方法在哪里?