如何限制函数的递归深度?

最佳答案

创建递归函数时,您始终可以传递所谓的累积参数。只需传递一个额外的数字参数,该参数在您每次输入新的递归级别时都会递增(即,每次递归迭代时都精确递增一次参数)并将其传递。

您可以将此技术用于多种用途,以及跟踪递归深度。只需在函数开始时检查参数的值,然后在该参数等于您要遍历的最大深度时返回即可。



此示例显示了一个名为depthLevel的变量,该变量表示当前节点在树中的深度级别。 maxDepthLevel常数应在某处定义。此深度优先算法的遍历深度不超过maxDepthLevel。请注意,对于每个递归级别,depthLevel如何增加1,使其成为累加参数。

function depthFirst(var node, var depthLevel) {
    if(depthLevel > maxDepthLevel) {
        return;
    }

    //do logic for this node here

    var childrenOfThisNode = node.getChildren();

    foreach(var child in childrenOfThisNode) {
        depthFirst(child, depthLevel + 1)
    }
}

09-18 21:39