有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java递归计算嵌套向量中的唯一对象

我想计算一个特定向量中的唯一对象的数量。例如,我有一个类Person,它有Vector<Person> family。我在想办法计算大家庭的长度。人与人之间可能存在如下关系:-

Mike is related to Pete;
Mike is related to John;
John is related to Amy;

迈克将有一个四口之家(包括他自己)

我想唯一的方法就是递归,到目前为止我已经有了类似的东西

   public int getExtendedFamily(Person person) {

            // Add the current person if he/she does not exist
            if (!(lineage.contains(person))) {
                lineage.add(person);

                // If the person has no direct family
                if (person.getFamily().size() == 0)
                    return lineage.size();
                else {
                    // Otherwise iterate through the family members
                    for (Person familyMember : person.getFamily()) {
                        return lineage.size() + getExtendedFamily(familyMember);
                    }
                }
            } else {
                // Person already exists...
                return lineage.size();
            }

            return 0;
        }

我创建了一个新的向量lineage,以跟踪我遇到的独特的人

显然,我知道我的lineage.size()不正确,所以我对这段代码有点不理解。我只是不知道如何构造递归,如果有任何指导,我将不胜感激。即使只是伪代码

亲切的问候, 本

更新的代码,似乎有效

public int getExtendedFamily(Person person) {

    // If the person exists just return counter, 
    //and go back up the call stack;
    if ((lineage.contains(person))) {
        return counter;
    } else {

        // Otherwise add the person to the lineage data structure
        // and continue
        lineage.add(person);

        // Loop through current persons family
        for (Person family_member_ : person.getFamily()) {

            // If the current family member index is not in the lineage
            // then increase the counter and recursively call getExtendedFamily,
            // to count that persons unique family members.

            if (!lineage.contains(family_member_)) {
                counter++;
                getExtendedFamily(family_member_);
            };
        }
    }
    return counter;
}

共 (1) 个答案

  1. # 1 楼答案

    假设所有关系都已保存,则它可能只是向量的大小加1

    如果你进入了世代,在祖父母中没有报告后代,递归的方法是返回向量的大小,如果没有子代,则返回

    如果不要求关系完全保存,则将集合传递给递归函数并保存到集合。当向量为0时返回