C ++中的递归列表操作

时间:2016-04-28 22:27:13

标签: c++ arrays recursion

我正在寻找创建一个函数,该函数接受2个参数,一个数组和一个键值,并递归地检查数组的值以查看它们是否与键匹配。

要完成此操作,我需要检查数组是否为空。我还需要一种在递归函数中调用数组的方法。我无法在堆栈溢出上找到任何帮助,但我尝试了此Check if list is empty in C#帖子中建议的方法,但代码出错了。

TLDR需要弄清楚如何检查数组是否为空,以及如何对接受数组作为参数的函数进行递归调用。

// recursive method: increment count for each recursive call; return the value of count when the key matches the value, then decrement count on
int Search::ReKeySearch( int arr[], int key){
//bool isEmpty = !list.Any();   tried to use this code, found on StackExchange, gave following error: "Cannot refer to class template 'list' without a template argument list"

if ( arr[count] == 0 ){ //if the key matches the list index's value
    store = count;  // so that I can reset count to zero, I use a storing variable
    count = 0;      // count should always be zero on exiting or entering a function
    return store;
}

else{
    count++;
    if ( /*need to check if list is empty*/ ){
        ReKeySearch(arr[1:], key);    //recursive call to function on list after zeroth member
                                      //returns error "expected ']'", pointing to the colon
        }// using pointer to attack problem of list index
    else
        ;
    count--;
}
if (count == 0)
    return -1;

}

1 个答案:

答案 0 :(得分:0)

你当然可以用一个简单的循环来完成这样的任务,但是,我猜你想要递归地完成它。我会这样做。如果你想试验它,可以使用link

#include <iostream>
#include <vector>
using namespace std;

int searchHelper(const int arr[], int start, int stop, int key)
{
    if(start == stop)   return -1;
    if(arr[start] == key) return start;
    return searchHelper(arr, start + 1, stop, key);
}

int search(const int arr[], int size, int key)
{
    return searchHelper(arr, 0, size, key);
}

int search(vector<int> const& vec, int key)
{
    return searchHelper(vec.data(), 0, (int)vec.size(), key);
}

int main() {
    int arr[] = {3,10,2,5,6,1};

    cout << search(arr, 6, 10) << endl;
    cout << search(arr, 6, 20) << endl;

    return 0;
}

请注意,我提供了两种方法,一种是使用STL向量的另一种方法。使用矢量,您不必分别保持数组的大小。如果对数组进行排序,则可以使用类似的方法进行二进制搜索。