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
в первый раз, но теперь, если я снова вызову функцию, она добавит к предыдущему значению count
, когда я сначала вызываю countLatticePoints
. Я понимаю, что это происходит из-за того, как ведет себя статический классификатор. Есть ли способ, который я могу сбросить, чтобы переменная count
вернулась к 0 после завершения одного вызова, прежде чем я вызову второй? Конечно, я не хочу использовать глобальные переменные, есть ли другой подход, который может работать в этой ситуации?Counting внутри рекурсивной функции
Вам не нужно передавать собственные типы, как '' double' или int' как '' & сопзЬ. Константа-ссылка обычно используется для передачи больших объектов или классов – stackptr
«это отлично работает, когда я вызываю функцию countLatticePoints в первый раз, но теперь, если я снова вызову функцию, она добавит к предыдущему значению счетчика, когда я впервые назвал countLatticePoints». - Если это не то поведение, которое вы хотите, ЧТО ВЫ ХОТИТЕ? После того, как fuction вызвал извне в первый раз и вернулся, что должно быть вашим счетом? После того, как он был вызван во второй раз и вернулся, какой должен быть ваш счет? – user31264
@ user31264 После первого вызова это 19, второй звонок должен быть 51, но вместо этого его 19 + 51 –