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
如果你进入了世代,在祖父母中没有报告后代,递归的方法是返回向量的大小,如果没有子代,则返回
如果不要求关系完全保存,则将集合传递给递归函数并保存到集合。当向量为0时返回