2015-09-27 4 views
0

Я пытаюсь написать рекурсивный метод рекомендовать друзьям, как написано здесьРекурсивный метод рекомендовать друзьям

Мы будем принимать подход рекомендации всех наших друзей друзей и наших друзей друзей друзей , и так далее. Это прекрасная возможность использовать рекурсию - мы можем создать метод getRecommendations, который использует FacebookUser как аргумент. Метод должен возвращать ArrayList, который содержит всех друзей FacebookUser, который передается в него, а также результат вызова того же метода getRecommendations на всех этих друзей FacebookUser. Будьте внимательны, чтобы не добавлять кого-либо в список рекомендаций, если они уже на нем, что может привести к бесконечному циклу.

Мой код до сих пор:

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

Я вернул его? Я не понимаю, что вы говорите о – shishi

+0

Я пытался добавить дополнительную информацию, я думаю, что редактировал ее в то же время, что и вы, извините. – shishi

+0

Я вроде как здесь. Спасибо за исправление моего сообщения в любом случае – shishi

ответ

2

В ветке else вам не нужно снова и снова вызывать рекурсивную функцию для всех пользователей в рекомендациях. Вместо того, чтобы назвать его просто для вновь найденного пользователя, который вы только что добавили в список рекомендаций, как это:

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

иначе вы будете в конечном итоге с бесконечным циклом, как текст, который вы включены объясняет.

+0

Вау, это очень помогло. Спасибо! :) – shishi

+0

Добро пожаловать! :) –

Смежные вопросы