【问题标题】:Recursive linear search algorithm递归线性搜索算法
【发布时间】:2018-09-16 20:33:08
【问题描述】:

我有一个家庭作业,要创建一个从一个索引到另一个索引的递归线性搜索算法。由于某种原因,以下代码每次都返回 -1。

public static int recLinearSearch(ArrayList<String> pList, String pKey, int pBeginIdx, int pEndIdx) {
    if (pBeginIdx > pEndIdx) {
        return -1;
    } else if (pList.get(pBeginIdx).equals(pKey)) {
        return pList.indexOf(pBeginIdx);
    }
    // Recursive case
    else return recLinearSearch(pList, pKey, pBeginIdx + 1, pEndIdx - 1);


}

我是这样称呼它的:

ArrayList<String> list = new ArrayList<>();

list.add("Jonathan");
list.add("Zier");

System.out.println(list.size()); // returns 2

int idx = Hw3_1.recLinearSearch(list, "Jonathan", 0, list.size() - 1);
System.out.println(idx);    //returns -1

【问题讨论】:

  • 我认为return pList.indexOf(pBeginIdx); 应该只是return pBeginIdx;。否则,您将在String 对象列表中寻找Integer。我将此 VTC 认为是一个错字 - 这似乎比发布答案更合适。
  • @DawoodibnKareem 是正确的(ish)。由于您没有说函数是否应该返回索引或元素,return pList.get(pBeginIdx) 可能是正确的。主要问题是您要修改两个端点,但只测试一个。
  • 现在我发现这是一个非常愚蠢的错误。谢谢!
  • 我删除了我的近距离投票,因为这是由两个错误引起的 - 我提到的一个和 Tibrogargan 提到的一个。
  • 您如何使用 pEndIdx?似乎没有用,并且在每次匹配时,它都会无缘无故地减少。

标签: java list recursion


【解决方案1】:

索引不是列表中的元素,因此pList.indexOf(pBeginIdx) 将始终返回-1。此外,使用indexOf 有点错过了,恕我直言 - 你应该自己实现搜索。您已经正确检查了元素是否等于键 - 您只需要返回它:

public static int recLinearSearch(ArrayList<String> pList, String pKey, int pBeginIdx, int pEndIdx) {
    if (pBeginIdx > pEndIdx) {
        return -1;
    } else if (pList.get(pBeginIdx).equals(pKey)) {
        return pBeginIdx; // Here!
    }
    // Recursive case
    else return recLinearSearch(pList, pKey, pBeginIdx + 1, pEndIdx); // Don't alter the end index!
}

【讨论】:

    猜你喜欢
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    相关资源
    最近更新 更多