Recursive返回元素java索引的方法

时间:2014-10-21 00:44:23

标签: java recursion methods iteration

我正在尝试搜索已排序的数组以查找我选择的数字。如果数组包含此数字,我想返回每个匹配项的索引。我需要写方法来完成这项任务。一个递归,一个迭代。我已经开始了下面的递归方法。

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 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("");

1 个答案:

答案 0 :(得分:1)

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

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;
}

两项变更都在终止区域。当第一个&gt;最后你已经用尽了搜索,你不需要比较所需的项目。同样在终止时,您应该返回-(last+1),而不是-(position+1),因为位置始终为0.