终止随机搜索

时间:2013-09-19 16:03:28

标签: c++

我有一个随机搜索功能。它选择一个随机数并在给定容器中搜索该数字。经过足够的尝试,我希望能够终止递归调用。到目前为止,我必须通过我用作计数器的第三个参数。如何在函数内创建计数器?

#include <iostream>
#include "print.h"
#include "random.h"
std::vector<int>::size_type random_search(std::vector<int> A, int x, int cnt)
{
    int i = random(0, A.size() - 1);
    if(A[i] == x)
        return i;
    else if(cnt > 500) {
        std::cout << "NOT FOUND" << std::endl;
        return -1;
    }
    else {
        cnt++;
        return random_search(A, x, cnt);
    }
}
int main()
{
    std::vector<int> B;
    fill(B, 40);
    print(B);
    int index = random_search(B, 80, 0);
    std::cout << "position = " << index << std::endl;
    return 0;
}

如果我在函数顶部声明一个变量,那么对于每次递归,这个声明都会被覆盖并再次初始化。

如果尚未创建变量,是否有办法检查变量是否存在?例如,我正在考虑输入如下代码而没有第三个参数。

if(cnt)
    cnt++;
else
    int cnt = 0;

1 个答案:

答案 0 :(得分:2)

您可以设置cnt参数的默认值:

std::vector<int>::size_type random_search(std::vector<int> A, int x, int cnt = 0)
{
  // ...
}

现在你可以从你的主叫它,而不是为cnt传递0:

int index = random_search(B, 80);