我有一个调用自身的函数,但是为避免函数调用自身时发生无限递归,我传递了一个布尔变量,因此它不会再次调用自身。但是,这也意味着使用我的代码的人可以使用该函数并将其传递给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;
}
编辑:根据要求,我提供了一个更好的示例。当然,我们可以在再次调用doCheck()之前执行m_array[tracker] > x
,但这意味着我们的检查将执行两次,并且如果我们使用更复杂的算法检查某些内容,则可能会出现问题
这样做是一种好习惯吗?
答案 0 :(得分:2)
不,那是个坏主意。而是重新编写您的基本案例,以便它总是独立存在。
您的示例永远不会明智地递归,因此它可能也是
void foo(int x)
{
if (x > 10)
{ /* Do stuff here */ }
}