c++ - 在函数中使用 bool 值 "recursiveCall"参数是一种好习惯吗?

标签 c++ recursion

我有一个调用自身的函数,但为了避免函数调用自身时的无限递归,我传递了一个 bool 变量,这样它就不会再次调用自身。然而,这也意味着使用我的代码的人可以使用该函数并向其传递一个 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 但这意味着我们的检查将完成两次,如果我们使用更复杂的算法检查某些东西可能会有问题

这样做是好的做法吗?

最佳答案

不,这是个坏主意。而是重新编写您的基本案例,以便它始终自行停止。

你的例子永远不会明智地递归,所以它也可能是

void foo(int x)
{
    if (x > 10)
    { /* Do stuff here */ }
}

关于c++ - 在函数中使用 bool 值 "recursiveCall"参数是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56528267/

相关文章:

c++ - 如何检查路径在 boost::filesystem 中是否有效?

algorithm - 查找特定位置不变的字符串的所有排列

java - 使用相互递归对两个文件进行二进制比较;更喜欢使用一种方法,调用自身。如何?

Java - addDigits 方法的大O?

c++ - 这段代码是否遵循递归的定义?

c++ - 常见数据类型的长度是多少?

c++ - 类实例的内存分配——应该使用继承来减少内存消耗吗?

c++ - 将 3D numpy 数组从 cython 传递到 C++

c++ - NMAKE : fatal error U1077: cl. exe 和 nmake.exe 返回代码 '0x2'

java - 递归检索列表中的所有元素