Le funzioni ricorsive sono funzioni che chiamano se stesse.
Una funzione ricorsiva deve avere almeno un caso base e almeno un caso ricorsivo.
Un caso base restituisce un valore senza chiamare di nuovo la funzione. Un caso ricorsivo chiama di nuovo la funzione, modificando l'input in modo che a un certo punto corrisponda al caso base.
Molto spesso, ogni caso è scritto in una propria clausola della funzione.
# base case
def count([]), do: 0
# recursive case
def count([_head | tail]), do: 1 + count(tail)
Sei un appassionato osservatore di uccelli che tiene traccia di quanti uccelli hanno visitato il tuo giardino in un giorno qualsiasi.
Hai deciso di portare l'osservazione degli uccelli a un nuovo livello e di implementare alcuni strumenti che ti aiuteranno a tenere traccia dei dati e a elaborarli.
Hai scelto di memorizzare i dati come un array di numeri interi. Il primo numero dell'array è il numero di uccelli che hanno visitato il tuo giardino oggi, il secondo quello di ieri, e così via.
Implementa la funzione BirdCount.today/1. Dovrebbe ricevere un array di conteggi giornalieri di uccelli e restituire il conteggio di oggi. Se l'array è vuoto, dovrebbe restituire nil.
BirdCount.today([2, 5, 1])
# => 2
Implementa la funzione BirdCount.increment_day_count/1. Dovrebbe ricevere un array di conteggi giornalieri di uccelli e incrementare il conteggio di oggi di 1. Se l'array è vuoto, restituisci [1].
BirdCount.increment_day_count([4, 0, 2])
# => [5, 0, 2]
Implementa la funzione BirdCount.has_day_without_birds?/1. Dovrebbe ricevere un array di conteggi giornalieri di uccelli. Dovrebbe restituire true se c'è stato almeno un giorno in cui nessun uccello ha visitato il giardino, e false altrimenti.
BirdCount.has_day_without_birds?([2, 0, 4])
# => true
BirdCount.has_day_without_birds?([3, 8, 1, 5])
# => false
Implementa la funzione BirdCount.total/1. Dovrebbe ricevere un array di conteggi giornalieri di uccelli e restituire il numero totale di uccelli che hanno visitato il tuo giardino da quando hai iniziato a raccogliere i dati.
BirdCount.total([4, 0, 9, 0, 5])
# => 18
Alcuni giorni sono più intensi di altri. Un giorno intenso è quello in cui cinque o più uccelli hanno visitato il tuo giardino.
Implementa la funzione BirdCount.busy_days/1. Dovrebbe ricevere un array di conteggi giornalieri di uccelli e restituire il numero di giorni intensi.
BirdCount.busy_days([4, 5, 0, 0, 6])
# => 2
Iscriviti a Exercism per imparare e padroneggiare Elixir con 58 concetti168 esercizi e il mentoring di persone reali, tutto gratis.