【发布时间】:2020-04-04 21:42:59
【问题描述】:
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。
【问题讨论】:
-
在第二个循环中,
if (findPerson(...)) return findPerson(....)。如果找不到,您还需要return nullptr。 -
@JohnnyMopp 您的意思是添加循环还是修改现有循环?
-
递归最重要的一点是递归函数的工作方式与非递归函数完全一样。如果你调用了
findPerson以外的任何其他函数,函数会返回什么? -
如果
if语句为假,你认为这个函数会返回什么?