在递归中循环返回语句

时间:2017-11-17 09:55:11

标签: java recursion

我写了一个递归函数。这是伪代码:

    public recFunction(Node node) {
        for(int i=0; i<node.childCount(); i++){
            Node child = node.child(i);
            if(child.satisfies condition)
                return true;
            else
                return recFunction (child)
        }
        return false
    }

现在,节点的结构如下:

               a
              /  \
             b    c
            / \  / \
           d  e  f  g

这里,条件仅在“f”的情况下才为真。但是当函数移动到d和e并且它们返回false时,该函数甚至不愿意转移到“c”。这背后的原因是什么?我一直对递归函数有点模糊,特别是当它们包含带有return语句的循环时。有人可以解释一下这种情况会发生什么吗?

1 个答案:

答案 0 :(得分:4)

你的for循环被写成好像它应该遍历所有节点的子节点,但它总是在第一次迭代时返回。

if (child.satisfies condition)
    return true;
else
    return recFunction (child);

如果你想看看所有的孩子,直到你得到一个匹配,你可以试试这个:

if (child.satisfies condition)
    return true;
else if (recFunction(child))
    return true;

或更简单

if (child.satisfies condition || recFunction(child))
    return true;

然后,您的for循环可以继续并查看其他子项,直到找到正面结果。