所以我在这里有一个程序,它应该做一个非常简单的工作,搜索100个整数的数组来找到一个特定的键。这个程序中的linearSearch
函数应该是递归的,所以我必须从内部调用函数。该程序编译正常,但由于某种原因,只返回数组中的第一个元素0
,无论您放入什么搜索键。
我没看到什么?感谢。
#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
,对吧?
〜非常感谢,你们这些人很快就得到了巨大的帮助。 =)
答案 0 :(得分:4)
你的错误是那个
if(array[index] != key)
{
index++;
linearSearch(array, key, sizeOfArray);
}
应该是
if(array[index] != key)
{
index++;
return linearSearch(array, key, sizeOfArray);
}
当密钥不相等时,您不会返回任何值。
另外静态指数很糟糕,正如已经说过的那样。
答案 1 :(得分:3)
我正在采用正确的做法,将
index
声明为static
,对吧?
没有。相反,index
应该是递归函数的参数。
由于static
状态,该函数很难测试,并且不是线程安全的。此外,它无意中在调用之间保持状态,这意味着如果你第二次调用它,它将无效(因为index
仍然具有旧值)。
答案 2 :(得分:1)
以递归方式执行此类搜索时,必须传播当前在数组中的索引。
你正在这样做,有一个全局变量index
,因为static关键字,在你的函数的每次调用中都是相同的。
索引应该是一个参数,每次递归调用函数时,都会将index + 1作为参数传递。
此外,您必须返回递归调用的值,否则它不会执行任何操作,也不会存储/处理返回的值。
答案 3 :(得分:1)
您也可以在不使用静态局部变量index
的情况下将搜索功能更改为以下内容。
int linearSearch(const int array[], int index, int key, int sizeOfArray)
{
//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
return linearSearch(array, index + 1, key, sizeOfArray);
}
唯一的变化是您将起始索引传递给搜索功能。