答案 0 :(得分:0)
在这种情况下,强力搜索和递归搜索都具有相同的时间复杂度。但是如果你想要递归版本,那么伪代码会:
调用一个带数组和键的函数进行搜索。为数组创建一个静态索引。
检查索引是否超出范围然后返回-1(表示未找到)
检查数组中的当前元素是否为key。 if true返回静态索引;
否则通过递增索引来返回函数调用。
答案 1 :(得分:0)
问题可能是指在排序列表中找到某个元素的等级。
实际上,此操作不需要显式排序数组,而只是计算有多少元素小于它(假设升序排序)。
最好的复杂性是O(n),因为需要检查每个元素。
使用非递归方法实现O(n)复杂度非常简单 - 只需遍历所有元素,并在每次遇到较小元素时增加计数器。计数器的最终值表示感兴趣元素在排序数组中的位置(请注意,这是在未明确排序的情况下获得的。)
下面说明了一个模拟这种行为的简单递归解决方案(使用c风格的代码):
getRank(int value, int* array, int nElements) {
if (nElements == 0) return 0;
if (array[0] < value)
return 1 + getRank(value, array + 1, nElements - 1);
else
return getRank(value, array + 1, nElements - 1);
}