0

我正在尝试使用特定方法在数组中查找值。

public void findElement(int valueToFind)
{
    FindElementInArray(valueToFind, 0, _array.Length - 1);
}

public void FindElementInArray(int value, int lb, int rb)
    {          
        int currIndex = (rb - lb) / 2;
        if (_array[currIndex] == value)
        {
            //Value found
            Console.WriteLine("Value found");
            return;
        }

        //If found value is smaller than searched value
        else if (_array[currIndex] < value)
        {
            FindElementInArray(value, currIndex+1, rb);
        }

        //If found value is bigger than searched value
        else
        {
            FindElementInArray(value, lb, currIndex - 1);
        }   

所以我搜索数组的中间,如果值大于我们要找的值,我们搜索左半边的中间,依此类推......

但即使它们在数组中,它也找不到一些值。有人能看出错误吗?

4

2 回答 2

6

您使用的索引错误。

int currIndex = (rb - lb) / 2;

您需要获得 rb 和 lb 的中点,即:

int currIndex = lb + (rb - lb) / 2;
// or
// int currIndex = (lb + rb) / 2;

如果该值不存在,您还需要以某种方式退出递归,因为目前它只会继续并导致堆栈溢出。您可以通过检查确保lbrb不同来做到这一点,例如:

if (_array[currIndex] == value)
{
    //Value found
    Console.WriteLine("Value found");
    return;
}
else if (lb != rb)
{
    //If found value is smaller than searched value
    else if (_array[currIndex] < value)
    {
        FindElementInArray(value, currIndex+1, rb);
    }

    //If found value is bigger than searched value
    else
    {
        FindElementInArray(value, lb, currIndex - 1);
    }   
}
于 2013-04-10T09:59:27.950 回答
0
int currIndex = (rb - lb) / 2;

应该

int currIndex = (rb + lb) / 2;

你需要找到一个中点。

于 2013-04-10T10:00:41.017 回答