У меня есть функция, которая вызывает себя, но чтобы избежать бесконечной рекурсии, когда функция вызывает себя, я передаю логическую переменную, чтобы она не вызывала себя снова.Однако это также означает, что кто-то, использующий мой код, может использовать функцию и передать ей аргумент true
.
class Test
{
public:
static bool doCheck(int x, bool recursiveCall = false)
private:
int m_array {10, 5, 3, 25, 12, 0, -6};
int tracker = 0;
};
bool Test::doCheck(int x, bool recursiveCall)
{
if (m_array[tracker] > x)
{
//do stuff
++tracker;
return true;
}
else if (!recursiveCall)
{
// reset tracker
tracker = 0;
return doCheck(x, true);
}
return false;
}
int main()
{
Test::doCheck(2); // returns true, m_array[tracker] now equals 5
// The next call will go through the "else if" part which will reset the tracker
// and return false, if we didn't call the function as recursive it would call itself infinitely !
Test::doCheck(50);
return 0;
}
Редактировать: По запросу я привел лучший пример.Конечно, мы могли бы выполнить m_array[tracker] > x
перед повторным вызовом doCheck (), но это означает, что наша проверка будет выполнена дважды, и это может быть проблематично, если мы проверяем некоторые вещи, используя более сложный алгоритм
Это хорошая практикасделать это?