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