推荐朋友的递归方法

时间:2015-09-27 21:25:18

标签: java

我正在尝试编写一个递归方法来推荐这里写的朋友

  

我们将采取的方法   推荐我们所有朋友的朋友和朋友的朋友的朋友,等等。   这是使用递归的绝佳机会 - 我们可以创建一个   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()方法来使用或指出我的方法有什么问题吗?

1 个答案:

答案 0 :(得分:2)

在else分支中,您不需要一次又一次地为推荐中的所有用户调用递归函数。而只是为刚刚添加到推荐列表中的新发现的用户调用它,如下所示:

else {
    recommendations.add(u);
    getRecommendations(u);
}

否则您将以无限循环结束,因为您所包含的文字会解释。