在不使用for或while的情况下在排序数组中查找元素

时间:2018-11-24 23:30:57

标签: c++ arrays recursion search

我有一个数组,其中七个数字从最小到最大排序。我必须编写一个返回特定值索引的递归函数。我不允许使用while或for循环。我绝对没有办法,也不知道如何解决这个问题。你能给我一些想法吗?

2 个答案:

答案 0 :(得分:1)

由于对数组进行了排序,因此该问题可能希望您使用二进制搜索而不是线性搜索方法。查找“递归二进制搜索”。它应该可以帮助您解决问题。

来自http://www.fredosaurus.com/notes-cpp/algorithms/searching/rbinarysearch.html的示例代码:

int rBinarySearch(int sortedArray[], int first, int last, int key) {
// function:
//   Searches sortedArray[first]..sortedArray[last] for key.  
// returns: index of the matching element if it finds key, 
//         otherwise  -(index where it could be inserted)-1.
// parameters:
//   sortedArray in  array of sorted (ascending) values.
//   first, last in  lower and upper subscript bounds
//   key         in  value to search for.
// returns:
//   index of key, or -insertion_position -1 
//                 if key is not in the array.

    if (first <= last) {
       int mid = (first + last) / 2;  // compute mid point.
       if (key == sortedArray[mid]) 
           return mid;   // found it.
       else if (key < sortedArray[mid]) 
           // Call ourself for the lower part of the array
           return rBinarySearch(sortedArray, first, mid-1, key);
       else
           // Call ourself for the upper part of the array
           return rBinarySearch(sortedArray, mid+1, last, key);
    }
    return -(first + 1);    // failed to find key
}

答案 1 :(得分:0)

给出函数签名:

int search(int *sorted, int value, unsigned size)

我们首先测试size是否为1,因为这是我们的基本情况。如果size是一个,我们检查一个元素sorted[0],看它是否等于我们要寻找的value。如果是,return 0,(唯一的)索引。如果没有return -1表示“未找到”。

如果size大于1,我们继续。首先,我们计算half的{​​{1}}。然后我们递归地称自己为减小的大小:

size / 2

如果此result = search(sorted, value, half); 不是-1,则返回它,因为它是我们想要的索引。如果result为-1,我们继续。我们再次递归地调用自己,但是这次使用了我们之前未测试的另一半数组:

result

如果result = search(sorted + half, value, size - half); 不为-1,则返回result result的大小。如果half为-1,则只需result,因为值不在数组中。