Las funciones recursivas son funciones que se llaman a sí mismas.
Una función recursiva necesita tener al menos un caso base y al menos un caso recursivo.
Un caso base devuelve un valor sin volver a llamar a la función. Un caso recursivo vuelve a llamar a la función y modifica el argumento para que en algún momento coincida con el caso base.
Muy a menudo, cada caso se escribe en su propia cláusula de función.
# base case
def count([]), do: 0
# recursive case
def count([_head | tail]), do: 1 + count(tail)
Eres una persona muy aficionada a observar aves y llevas la cuenta de cuántos pájaros han visitado tu jardín en un día cualquiera.
Decidiste llevar tu observación de aves a otro nivel e implementar algunas herramientas que te ayudarán a registrar y procesar los datos.
Elegiste guardar los datos como un array de números enteros. El primer número del array es la cantidad de pájaros que visitaron tu jardín hoy, el segundo, los de ayer, y así sucesivamente.
Implementa la función BirdCount.today/1. Debe recibir un array con los conteos diarios de pájaros y devolver el conteo de hoy. Si el array está vacío, debe devolver nil.
BirdCount.today([2, 5, 1])
# => 2
Implementa la función BirdCount.increment_day_count/1. Debe recibir un array con los conteos diarios de pájaros e incrementar en 1 el conteo de hoy. Si el array está vacío, devuelve [1].
BirdCount.increment_day_count([4, 0, 2])
# => [5, 0, 2]
Implementa la función BirdCount.has_day_without_birds?/1. Debe recibir un array con los conteos diarios de pájaros. Debe devolver true si hubo al menos un día en el que ningún pájaro visitó el jardín, y false en caso contrario.
BirdCount.has_day_without_birds?([2, 0, 4])
# => true
BirdCount.has_day_without_birds?([3, 8, 1, 5])
# => false
Implementa la función BirdCount.total/1. Debe recibir un array con los conteos diarios de pájaros y devolver el total que ha visitado tu jardín desde que empezaste a recopilar los datos.
BirdCount.total([4, 0, 9, 0, 5])
# => 18
Algunos días son más ajetreados que otros. Un día ajetreado es aquel en el que cinco o más pájaros han visitado tu jardín.
Implementa la función BirdCount.busy_days/1. Debe recibir un array con los conteos diarios de pájaros y devolver el número de días ajetreados.
BirdCount.busy_days([4, 5, 0, 0, 6])
# => 2
Regístrate en Exercism para aprender y dominar Elixir con 58 conceptos168 ejercicios y mentoría humana real, todo gratis.