我写了一个递归函数。这是伪代码:
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语句的循环时。有人可以解释一下这种情况会发生什么吗?
答案 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
循环可以继续并查看其他子项,直到找到正面结果。