recursion - Groovy 递归函数在哪里存储结果?

标签 recursion groovy tree

我正在尝试构建一个简单的树状对象结构并确定每个对象的深度级别。为此,我创建了一个递归函数,但该函数始终返回最后的结果,而不是预期的总结果。我可能将结果存储在错误的位置。

def getStructure(anObject, level=0) {

    def results = []

    // [parent id, object id, level]

    if(anObject.parent == null) {
        results.add([0, anObject.id, level])
    } else {
        anObject.children?.each { child ->
            results.add([anObject.parent.id, child.id, level])
    }

    // recursive call
    anObject.children?.each { child ->
       getStructure(child, level++)
    }

    results
}

在我的测试用例中,我总是获得最新的运行结果,所以我猜结果 = [] 每次都会重新初始化。如何存储递归函数的结果?

最佳答案

您需要将递归调用的结果添加到结果中。而不是

// recursive call
anObject.children?.each { child ->
   getStructure(child, level++)
}

试试这个:

// recursive call
anObject.children?.each { child ->
   results.addAll(getStructure(child, level++))
}

关于recursion - Groovy 递归函数在哪里存储结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14328437/

相关文章:

algorithm - Haskell 递归方案 : Traverse two structures simultaneously

java - 用于测试数组元素是否与某些索引相等的递归

python 3,递归,或在return语句中

gradle - 如何发布Gradle生成的BOM

algorithm - B树的最小和最大高度

java - 导航 2D 数组时,检查相邻元素是否存在相对于入口点的有效路径?

datetime - Grails-如果少于10分钟,则比较Groovy日期时间

jenkins - 使用 groovy 解析 Jenkin 的 shell 脚本中的 JSON 对象

algorithm - 找到具有 k 个蓝色顶点的树的最佳顶点覆盖

python - 如何让Python决策树更容易理解?