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