我正在尝试编写一个递归方法来推荐这里写的朋友
我们将采取的方法 推荐我们所有朋友的朋友和朋友的朋友的朋友,等等。 这是使用递归的绝佳机会 - 我们可以创建一个 getRecommendations方法,将FacebookUser作为参数。该 方法应该返回一个包含所有朋友的ArrayList 传递给它的FacebookUser加上调用它的结果 所有FacebookUser的朋友都有getRecommendations方法。小心不要将任何人添加到建议列表中(如果它们已经在其中) - 这可能会导致无限循环。
到目前为止我的代码是:
ArrayList<FacebookUser> getRecommendations(FacebookUser example) {
for (FacebookUser u : example.getFriends()) {
if (recommendations.contains(u)) {
return recommendations;
} else {
recommendations.add(u);
for (FacebookUser a : recommendations) {
getRecommendations(a);
}
}
}
return recommendations;
}
recommendations
是一个ArrayList:
ArrayList<FacebookUser> recommendations = new ArrayList<>();
我的getFriends()
方法就在这里:
ArrayList<FacebookUser> getFriends() {
@SuppressWarnings("unchecked")
ArrayList<FacebookUser> clone = (ArrayList<FacebookUser>) friends
.clone();
return clone;
}
有人可以给我一个正确的getRecommendations()
方法来使用或指出我的方法有什么问题吗?
答案 0 :(得分:2)
在else分支中,您不需要一次又一次地为推荐中的所有用户调用递归函数。而只是为刚刚添加到推荐列表中的新发现的用户调用它,如下所示:
else {
recommendations.add(u);
getRecommendations(u);
}
否则您将以无限循环结束,因为您所包含的文字会解释。