【发布时间】: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?似乎没有用,并且在每次匹配时,它都会无缘无故地减少。