递归线性搜索....帮助我找到错误

时间:2011-04-08 23:08:53

标签: java

我正在尝试用递归线性搜索方法编写一个类。这就是我到目前为止所拥有的。你能帮我解决一下我哪里出错了吗?请:)

我被问到一个方法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;
        }

    }
}

2 个答案:

答案 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;
    }

简单的线性搜索算法就像上面的代码部分一样。

我们如何将此算法从迭代转换为递归?您应该首先关注并解决这个问题。

当我查看你的代码时,有一些小错误。这些错误

  1. 使用构造函数的类型

  2. 重新创建int数组(此数组是您搜索给定项目的数组,因此没有任何意义)

  3. 我无法弄清楚LinearSearch结构之间的关系,如方法和 linearSearchRecursive。

  4. 当我们不认为您的代码结构时,我们可以看到您的代码与错误一起工作取决于逻辑错误。 你首先控制索引参数,如果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);
        }