[英]C++ - Return in Recursion of Tree
class Person {
private:
char* name;
int numChildren;
Person** childrenList;
public:
Person(char* name);
~Person();
// member functions
// ...
};
假設我通過以下代碼創建了一個
Person
:Person* me = new Person("Alex");
,Alex
的后代對象也將被創建。 對於特定實例,結構將如下所示:
我想實現一個函數const Person* Person::findPerson(const Person* thisPerson, const char* target_name) const;
,搜索所有Person
以找到name
等於target_name
那個。
這是我的代碼:
const Person* Person::findPerson(const Person* thisPerson, const char* target_name) const {
if (strcmp(thisPerson->name(), target_name) == 0)
return thisPerson;
for (int i = 0; i < thisPerson->numChildren(); i++)
findPerson(thisPerson->childrenList[i], target_name);
}
我認為代碼可以工作,但編譯器認為它可能不返回任何內容並且不讓我編譯它。 而且,如果找不到人,我不知道如何返回nullptr
。
你需要:
return
遞歸調用的結果,如果成功return nullptr
const Person* Person::findPerson(const Person* thisPerson, const char* target_name) const {
if (strcmp(thisPerson->name(), target_name) == 0)
return thisPerson;
for (int i = 0; i < thisPerson->numChildren(); i++) {
const Person *p = findPerson(thisPerson->childrenList[i], target_name);
// Found in child tree? Return it (terminate recursion)
if (p) return p;
}
// Not found in this branch of the tree
return nullptr;
}
盡管將Person
指針傳遞給Person
成員函數似乎有點奇怪。 此外, numChildren
和name
是成員變量,而不是函數。
不應該是:
const Person* Person::findPerson(const char* target_name) const {
if (strcmp(name, target_name) == 0)
return this;
for (int i = 0; i < numChildren; i++) {
const Person *p = childrenList[i]->findPerson(target_name);
// Found in child tree? Return it (terminate recursion)
if (p) return p;
}
// Not found in this branch of the tree
return nullptr;
}
而且,我不得不問你為什么不使用std::vector
和std::string
而不是數組和 char 指針?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.