Итак, у меня есть программа, которая должна выполнить очень простую задачу поиска по массиву из 100 целых чисел, чтобы найти конкретный ключ. Функция linearSearch
в этой программе должна быть рекурсивной, поэтому я должен вызвать функцию изнутри. Программа компилируется отлично, но по какой-то причине возвращает только первый элемент 0
, в массив независимо от того, какой ключ поиска вы вставляете. Что я не вижу? Благодарю.C++: ошибка выполнения с простой функцией рекурсивного поиска
#include <iostream>
using namespace std;
int linearSearch(const int[], int, int);
int main()
{
const int arraySize = 100; //size of array
int a[arraySize]; //create array a
int searchKey; //value to locate in array a
for(int i = 0; i < arraySize; i++)
a[i] = 2 * i; //create data
cout << "Enter integer search key: ";
cin >> searchKey;
//attempt to locate search key in array a
int element = linearSearch(a, searchKey, arraySize);
//display results
if(element != -1)
cout << "Found value in element: " << element << endl;
else
cout << "Value not found" << endl;
system("pause");
}
//linearSearch Function ****Returns 0 as index all the time *************
int linearSearch(const int array[], int key, int sizeOfArray)
{
static int index = 0;
//if Out of range, return -1 (Value not found)
if(index >= sizeOfArray){return -1;}
//if array value = key, array index is returned
if(array[index] == key){return index;}
//if array value is not equal to key, add to index and call func again
if(array[index] != key)
{
index++;
linearSearch(array, key, sizeOfArray);
}
}
Я беру правильный подход, объявляя index
как static
, верно?
~ Большое спасибо, вы, ребята, быстро и ОГРОМНАЯ помощь. =)
Нет, индекс 'static' - это почти наверняка плохая идея. Это фактически глобальная переменная, которая никогда не сбрасывается. –
«Я правильно подхожу?» Определенно нет, это должен быть параметр. – john
№. Он должен быть передан как параметр значения.Кроме того, ваша функция не имеет определенного возвращаемого значения для разрешения хвостового рекурсора, поэтому у этого нет никаких шансов работать как есть. – WhozCraig