我有一个作业分配来创建从一个索引到另一个索引的递归线性搜索算法。由于某种原因,以下代码每次都会返回-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

最佳答案

索引不是列表中的元素,因此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!
}

09-07 04:39