递归函数内的计数
Counting inside a recursive function
本文关键字:递归函数 更新时间:2023-10-16
int countLatticePoints(std::vector<int> &point, const double &radius, const int &dimension) {
static int count = 0;
for(int i = -(static_cast<int>(std::floor(radius))); i <= static_cast<int>(std::floor(radius)); i++) {
point.push_back(i);
if(point.size() == dimension){
if(isPointWithinSphere(point, radius)) count++;
}else countLatticePoints(point, radius, dimension);
point.pop_back();
}
return count;
}
我有上面的递归函数,如果条件isPointWithinSphere( ... )
为真,我想增加一些变量。我最初的方法是声明一个名为 count
的静态变量,以便它通过每个递归调用来维护计数。好的,当我第一次调用函数时,这countLatticePoints
工作正常,但现在如果我再次调用该函数,它会添加到我第一次调用countLatticePoints
时的前一个count
值。我知道发生这种情况是由于静态限定符的行为方式。有什么方法可以在一次调用完成后将该count
变量重置回 0,然后再调用第二个调用?我当然不想使用全局变量,在这种情况下还有其他方法可以工作吗?
您不需要任何静态变量或其他参数。这是你需要的。
int countLatticePoints(std::vector<int> &point, const double &radius, const int &dimension) {
int count = 0;
const int iRadius = std::floor(radius);
for(int i = -iRadius; i <= iRadius; i++) {
point.push_back(i);
if(point.size() == dimension){
if (isPointWithinSphere(point, radius))
count++;
} else
count += countLatticePoints(point, radius, dimension);
point.pop_back();
}
return count;
}
附带说明一下,您不需要传递 int 或 double 作为引用。
您可以使用帮助程序函数来完成所需的操作,如下所示:
void countLatticePoints(std::vector<int> &point, const double &radius, const int &dimension, int& count) {
const int int_radius = static_cast<int>(std::floor(radius));
for(int i = -int_radius; i <= int_radius; i++) {
point.push_back(i);
if(point.size() == dimension){
if(isPointWithinSphere(point, radius)) count++;
}else countLatticePoints(point, radius, dimension, count);
point.pop_back();
}
}
int countLatticePoints(std::vector<int> &point, const double &radius, const int &dimension) {
int count = 0;
countLatticePoints(point, radius, dimension, count);
return count;
}
传递计数作为参数;为其指定默认值 0,以便初始调用不必提供它。 这能满足您的需求吗?
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何在Elixir中调用递归函数并行
- 递归函数有效,但无法记忆
- 为什么我的递归函数按降序打印,然后按升序打印?
- 为什么递归函数的最终输出是 5?
- 有没有办法使用递归函数找到数组中最小值的 INDEX?C++
- 如何将记忆应用于此递归函数?
- 如何从递归函数中完全返回,该函数给出了每个函数结果的累积相加?
- 无穷大而循环时具有递归函数
- 即使没有调用这个递归函数,它是如何工作的?
- 如何使此递归函数从给定的起始位置返回最小的整数?
- 此递归函数的每次迭代的值存储在哪里?
- 可以清除递归函数中的变量吗?
- 如何在递归函数调用中返回当前函数值
- 递归函数 c++ 的复杂性
- 这个递归函数有什么作用?运行时的复杂性是多少?
- 任何人都可以查明我的递归函数中的错误吗?
- 递归函数的返回类型推导
- 递归函数调用在后台工作
- 查找存储在二叉搜索树的所有非叶子中的数据总和?(返回整数的独立递归函数