我想计算特定Vector内部的唯一对象的数量。例如,我有一个Person
的班级Vector<Person> family
。我试图找到一种方法来计算大家庭的长度。人们之间可能存在关系,例如: -
Mike is related to Pete;
Mike is related to John;
John is related to Amy;
迈克将有一个4人的大家庭(包括他自己)。
我认为唯一的方法是使用递归,到目前为止我有类似的东西。
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;
}
答案 0 :(得分:0)
假设关系全部保存,它可能只是向量的大小加一。
如果你进入世代,祖父母没有报告后代,那么递归的方法就是返回向量的大小,如果没有孩子就返回。
如果没有要求完全保存关系,请将一个集传递给递归函数并保存到集合中。向量为0时返回。