Funções recursivas são funções que chamam a si mesmas.
Uma função recursiva precisa ter pelo menos um caso base e pelo menos um caso recursivo.
Um caso base retorna um valor sem chamar a função de novo. Um caso recursivo chama a função de novo, modificando a entrada para que em algum momento ela corresponda ao caso base.
Muitas vezes, cada caso é escrito em sua própria cláusula de função.
# base case
def count([]), do: 0
# recursive case
def count([_head | tail]), do: 1 + count(tail)
Você adora observar aves e acompanha quantas aves visitaram seu jardim em cada dia.
Você decidiu levar sua observação de aves a um novo nível e implementar algumas ferramentas que vão te ajudar a acompanhar e processar os dados.
Você escolheu armazenar os dados como uma lista de inteiros. O primeiro número da lista é a quantidade de aves que visitaram seu jardim hoje, o segundo, ontem, e assim por diante.
Implemente a função BirdCount.today/1. Ela deve receber uma lista com a contagem diária de aves e retornar a contagem de hoje. Se a lista estiver vazia, ela deve retornar nil.
BirdCount.today([2, 5, 1])
# => 2
Implemente a função BirdCount.increment_day_count/1. Ela deve receber uma lista com a contagem diária de aves e incrementar a contagem de hoje em 1. Se a lista estiver vazia, retorne [1].
BirdCount.increment_day_count([4, 0, 2])
# => [5, 0, 2]
Implemente a função BirdCount.has_day_without_birds?/1. Ela deve receber uma lista com a contagem diária de aves. Ela deve retornar true se houve pelo menos um dia em que nenhuma ave visitou o jardim, e false caso contrário.
BirdCount.has_day_without_birds?([2, 0, 4])
# => true
BirdCount.has_day_without_birds?([3, 8, 1, 5])
# => false
Implemente a função BirdCount.total/1. Ela deve receber uma lista com a contagem diária de aves e retornar o número total que visitou seu jardim desde que você começou a coletar os dados.
BirdCount.total([4, 0, 9, 0, 5])
# => 18
Alguns dias são mais movimentados que outros. Um dia movimentado é aquele em que cinco ou mais aves visitaram seu jardim.
Implemente a função BirdCount.busy_days/1. Ela deve receber uma lista com a contagem diária de aves e retornar o número de dias movimentados.
BirdCount.busy_days([4, 5, 0, 0, 6])
# => 2
Crie sua conta no Exercism para aprender e dominar Elixir com 58 conceitos168 exercícios e mentoria humana de verdade, tudo de graça.