我正在尝试用递归线性搜索方法编写一个类。这就是我到目前为止所拥有的。你能帮我解决一下我哪里出错了吗?请:)
我被问到一个方法public int linearSearchRecursive(Tile value)
和方法addTile(Tile tile)
,因为参数是Tile
值。我不知道如何去做。请用瓷砖向我指出正确的方向。
class LinearSearch {
public static int LinearSearch(int a[], int value) {
return LinearSearch(value);
}
private int[] numbers;
public int LinearSearch(int size) {
numbers = new int[size];
}
public int linearSearchRecursive(Tile value) {
if (value == numbers[startingIndex]) {
return startingIndex;
}
else if (startingIndex + 1 < numbers.length) {
return linearSearch(value, startingIndex + 1);
}
else {
return -1;
}
}
}
答案 0 :(得分:4)
以下是一些提示:
答案 1 :(得分:1)
您的代码未编译,我想您想用某种伪代码编写代码。
首先,我建议您阅读数据结构书的递归算法部分,这取决于您的选择。
您知道线性搜索的复杂性是O(n),因为您的列表可能未排序,因此您应该查看此列表中的每个项目。
int linearSearchIterative(int[] input, int key) {
for (int i = 0; i < input.length; i++) {
if (input[i] == key) {
return i;
}
else continue;
}
return -1;
}
简单的线性搜索算法就像上面的代码部分一样。
我们如何将此算法从迭代转换为递归?您应该首先关注并解决这个问题。
当我查看你的代码时,有一些小错误。这些错误
使用构造函数的类型
重新创建int数组(此数组是您搜索给定项目的数组,因此没有任何意义)
我无法弄清楚LinearSearch结构之间的关系,如方法和 linearSearchRecursive。
当我们不认为您的代码结构时,我们可以看到您的代码与错误一起工作取决于逻辑错误。 你首先控制索引参数,如果index ==数组的大小你应该返回-1; 在所谓的控制之后,你应该检查给定索引中的项是否与密钥相等。 如果它不相等,请再次调用递归函数。
所以算法就像这段代码
private int linearSearchRecursive(int[] input, int key,int index) {
if (index == input.length-1) {
return -1;
}
if (input[index] == key) {
return index;
}
else
return linearSearchRecursive(input,key,++index);
}