在递归调用中保持设置值

时间:2019-03-29 21:32:59

标签: java recursion

我有这段代码可以计算子节点的数量并将其添加到集合中。但是,返回该方法时set中的值会丢失,最终结果中set中的一个值会丢失。如何更改代码以保留所有值?我无法更改方法的标题。谢谢!

        public Set<Integer> countChildren() {
        Set<Integer> set = new HashSet<Integer>();
        for (Person child: children) {
            child.countChildren();
            set.add(child.children.size());
        }
        return set;
    }

3 个答案:

答案 0 :(得分:0)

您可以将set变量作为参数传递给递归函数。

public Set<Integer> countChildren(Set<Integer> set) {
    for (Person child: children) {
        child.countChildren(set);
        set.add(children.child.size());
    }
    return set;
}

答案 1 :(得分:0)

进行--set全局变量,然后仅以递归方式访问它。 为了获得一些自由,请编写onother函数并在给定的函数中调用它:

Set<Integer> set = new HashSet<Integer>();

public Set<Integer> myCountChildren(Set<Integer> set) {
    for (Person child: children) {            
        set.add(child.children.size());
        child.myCountChildren(set);
    }
    return set;
}

public Set<Integer> countChildren() {
    return myCountChildren(set)
}

答案 2 :(得分:0)

您不能更改方法签名,但是看起来'children'是类成员,因此可以从其他方法访问它。为什么不创建另一个方法,将包含来自其他调用的值的集合传递给该方法?实际上,这是一种称为“累加器”的模式,您可以在其中累积正在进行的调用的结果。

第二件事,选择一个保留这些值的集合看起来不是一个好主意。如果两个节点的子节点数相同怎么办?...