Рекурсивні функції - це функції, які викликають самі себе.
Рекурсивна функція повинна мати принаймні один базовий випадок і принаймні один рекурсивний випадок.
Базовий випадок повертає значення, не викликаючи функцію знову. Рекурсивний випадок викликає функцію знову, змінюючи вхідні дані так, щоб вони рано чи пізно збіглися з базовим випадком.
Дуже часто кожен випадок записують як окремий варіант функції.
# base case
def count([]), do: 0
# recursive case
def count([_head | tail]), do: 1 + count(tail)
Ми завзяті спостерігачі птахів і ретельно записуємо, скільки птахів завітало до нашого саду за день.
Ми вирішили вивести своє спостереження за птахами на новий рівень і створити кілька інструментів, які допоможуть нам відстежувати й обробляти дані.
Ми обрали зберігати дані як масив цілих чисел. Перше число в масиві - це кількість птахів, які завітали до нашого саду сьогодні, друге - вчора, і так далі.
Реалізуйте функцію BirdCount.today/1. Вона повинна приймати масив із кількістю птахів за кожен день і повертати сьогоднішню кількість. Якщо масив порожній, вона повинна повернути nil.
BirdCount.today([2, 5, 1])
# => 2
Реалізуйте функцію BirdCount.increment_day_count/1. Вона повинна приймати масив із кількістю птахів за кожен день і збільшувати сьогоднішню кількість на 1. Якщо масив порожній, поверніть [1].
BirdCount.increment_day_count([4, 0, 2])
# => [5, 0, 2]
Реалізуйте функцію BirdCount.has_day_without_birds?/1. Вона повинна приймати масив із кількістю птахів за кожен день. Вона повинна повертати true, якщо був принаймні один день, коли жоден птах не завітав до саду, і false в іншому разі.
BirdCount.has_day_without_birds?([2, 0, 4])
# => true
BirdCount.has_day_without_birds?([3, 8, 1, 5])
# => false
Реалізуйте функцію BirdCount.total/1. Вона повинна приймати масив із кількістю птахів за кожен день і повертати загальну кількість птахів, які завітали до нашого саду відтоді, як ми почали збирати дані.
BirdCount.total([4, 0, 9, 0, 5])
# => 18
Деякі дні насиченіші за інші. Насиченим вважається день, коли до нашого саду завітало пʼять або більше птахів.
Реалізуйте функцію BirdCount.busy_days/1. Вона повинна приймати масив із кількістю птахів за кожен день і повертати кількість насичених днів.
BirdCount.busy_days([4, 5, 0, 0, 6])
# => 2
Зареєструйтеся на Exercism, щоб вивчати й опановувати Elixir, а також 58 концепцій168 вправ та справжнє наставництво від людей, і все це безкоштовно.