【问题标题】:Recursive Method that returns the index of an element java返回元素索引的递归方法java
【发布时间】:2014-12-16 02:51:36
【问题描述】:

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

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

【问题讨论】:

  • 你的问题是什么?
  • 你的意思是int mid = (first + last) / 2;
  • 不确定我是否理解,请您重新表述问题
  • 我重新表述了这个问题。现在更有意义了吗?
  • 不,findRecursive 方法在哪里?

标签: java recursion methods iteration


【解决方案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;
}

这两项更改都在终止区域。当 first > last 您已经用尽搜索时,您不需要比较所需项目。同样在终止时,您应该返回-(last+1),而不是-(position+1),因为位置始终为0。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    • 2016-08-03
    相关资源
    最近更新 更多