Я работаю над одним из своих первых проектов на Котлине — FamilyTree. У меня есть класс Person, который содержит поля: имя, возраст, мать, отец и множество братьев и сестер. После инициализации всех элементов теперь мне нужно их всех посчитать, и вот моя проблема.
Давайте сделаем проще: забудьте о братьях и сестрах, только отец и мать. Учитывая тот факт, что все элементы связаны ссылками на их мать, отец, я подумал, что лучшим решением будет использование рекурсивной функции. Я проверяю, есть ли у меня мать, если она у меня есть - я увеличиваю счетчик и проверяю, есть ли у ОНА мать, если она есть - я увеличиваю счетчик и проверяю, есть ли у ЕЕ МАТЕРИ мать, если у ЕЕ МАТЕРИ есть отец, ... Делаю некоторые своего рода бинарное дерево поиска. Код его ниже:
class Person(...) {
var amountOfAllRelatives = 0
fun countAmountOfAllRelatives() {
this.mother?.let {
amountOfAllRelatives++
it.countAmountOfAllRelatives()
}
this.father?.let {
amountOfAllRelatives++
it.countAmountOfAllRelatives()
}
this.siblings?.let {
it.forEach {
amountOfAllRelatives++
it.countAmountOfAllRelatives()
}
}
}
}
Не работает - каждый раз результат равен 0, потому что каждый раз, когда я вызываю функцию CountOfAllRelatives, она обнуляет счетчик.
Я создаю объект-компаньон, который добавляет в список каждого нового человека, поэтому его легко сосчитать, но это неправильное решение, потому что этот список не является частью экземпляра, это часть класса.
Я думаю, я могу решить это с помощью циклов, это будет просто написать, но нелегко прочитать. Может быть, вы можете подсказать, как исправить функцию с рекурсией?
Я добавил эту часть проекта на Github: https://github.com/RomanMetelov/FamilyTree.git< /а>
Спасибо за ваше время и хорошего дня!