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 la entrada 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 un gran aficionado a la observación de aves que lleva un registro de cuántos pájaros han visitado tu jardín en un día cualquiera.
Has decidido llevar tu afición por la observación de aves al siguiente nivel e implementar algunas herramientas que te ayudarán a hacer un seguimiento de los datos y procesarlos.
Has elegido almacenar los datos como un array de números enteros. El primer número del array es el número de pájaros que han visitado tu jardín hoy, el segundo ayer, y así sucesivamente.
Implementa la función BirdCount.today/1. Debe recibir un array de recuentos diarios de pájaros y devolver el recuento 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 de recuentos diarios de pájaros e incrementar en 1 el recuento 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 de recuentos 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 de recuentos diarios de pájaros y devolver el número total de pájaros que han visitado tu jardín desde que empezaste a recopilar los datos.
BirdCount.total([4, 0, 9, 0, 5])
# => 18
Algunos días hay más movimiento 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 de recuentos 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.