作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个随机搜索功能。它选择一个随机数并在给定的容器中搜索该数字。经过足够多的尝试,我希望能够终止递归调用。到目前为止,为了做到这一点,我必须传递第三个参数,我将其用作反例。如何在函数内创建计数器?
#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;
最佳答案
您可以为 cnt
参数设置默认值:
std::vector<int>::size_type random_search(std::vector<int> A, int x, int cnt = 0)
{
// ...
}
现在您可以从您的 main 调用它而无需为 cnt
传递 0:
int index = random_search(B, 80);
关于c++ - 终止随机搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18899670/
这是 CLRS 问题。问题来自 CLRS 书的第三版:5-2-b。 随机搜索是一种算法,您必须随机选择一个元素并将其与搜索到的元素进行比较。如果等于,我们需要停止。现在,假设您正好有一个索引为 i 的
我是一名优秀的程序员,十分优秀!