c++ - 在递归函数中递增

标签 c++ recursion

在处理树处理问题时,我对存储已观察到的特定模式的实例数的最佳方法感到困惑。

例如,假设我想返回二叉搜索树中数字可被 2 整除的次数。我将递归遍历该树,检查每个键是否可被 2 整除,然后递增一个计数器。

现在,我能想到的存储这个计数器的唯一方法是通过引用。 例如:

DivByTwo(node, counter) {
    DivByTwo(node.left, counter)
    DivByTwo(node.right, counter)

    if (node.key % 2 == 0) 
      counter ++
}

完成后,counter 的值将是可被 2 整除的键数。这是处理此问题的正确方法吗?有没有更好的方法来捕获此数据而不强制用户通过引用传递一些变量?

最佳答案

这是一种避免传递 ref 参数的方法,尽管它需要能够返回一个值(您不包含任何类型信息,所以我对您的类型进行了最好的猜测):

int DivByTwo(NodeType node){
    int result = DivByTwo(node.left) + DivByTwo(node.right);
    if(node.key % 2 == 0)
        result += 1;
    return result;
}

关于c++ - 在递归函数中递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35753841/

相关文章:

python - 如何计算递归函数的时间?

algorithm - 每个递归算法都是分而治之的算法吗?

c++ - 当构造函数抛出异常时删除运算符段错误

java - 带递归的 printStars 方法

parsing - 使用从右到左的解析器绕过左递归

c# - 跨语言共享环境变量

注释掉从未执行的代码时,Java 程序运行速度变慢

c++ - 在数组中查找数字

c++ - 在 C++11 中获取函数指针的语法

c++ - 将文本渲染到开罗上下文时出现段错误