Rekursive Funktionen sind Funktionen, die sich selbst aufrufen.
Eine rekursive Funktion braucht mindestens einen Basisfall und mindestens einen rekursiven Fall.
Ein Basisfall gibt einen Wert zurück, ohne die Funktion erneut aufzurufen. Ein rekursiver Fall ruft die Funktion erneut auf und verändert dabei den Eingabewert so, dass er irgendwann dem Basisfall entspricht.
Sehr oft wird jeder Fall in eine eigene Funktionsklausel geschrieben.
# base case
def count([]), do: 0
# recursive case
def count([_head | tail]), do: 1 + count(tail)
Du bist ein begeisterter Vogelbeobachter und hältst fest, wie viele Vögel an einem beliebigen Tag deinen Garten besucht haben.
Du hast beschlossen, deine Vogelbeobachtung auf ein neues Niveau zu heben und ein paar Werkzeuge zu entwickeln, mit denen du die Daten erfassen und verarbeiten kannst.
Du hast dich entschieden, die Daten als Liste von Ganzzahlen zu speichern. Die erste Zahl in der Liste ist die Anzahl der Vögel, die heute deinen Garten besucht haben, die zweite gestern, und so weiter.
Implementiere die Funktion BirdCount.today/1. Sie soll eine Liste der täglichen Vogelzahlen entgegennehmen und die heutige Anzahl zurückgeben. Wenn die Liste leer ist, soll sie nil zurückgeben.
BirdCount.today([2, 5, 1])
# => 2
Implementiere die Funktion BirdCount.increment_day_count/1. Sie soll eine Liste der täglichen Vogelzahlen entgegennehmen und die heutige Anzahl um 1 erhöhen. Wenn die Liste leer ist, soll sie [1] zurückgeben.
BirdCount.increment_day_count([4, 0, 2])
# => [5, 0, 2]
Implementiere die Funktion BirdCount.has_day_without_birds?/1. Sie soll eine Liste der täglichen Vogelzahlen entgegennehmen. Sie soll true zurückgeben, wenn es mindestens einen Tag gab, an dem keine Vögel den Garten besucht haben, andernfalls false.
BirdCount.has_day_without_birds?([2, 0, 4])
# => true
BirdCount.has_day_without_birds?([3, 8, 1, 5])
# => false
Implementiere die Funktion BirdCount.total/1. Sie soll eine Liste der täglichen Vogelzahlen entgegennehmen und die Gesamtzahl der Vögel zurückgeben, die deinen Garten besucht haben, seit du mit dem Sammeln der Daten begonnen hast.
BirdCount.total([4, 0, 9, 0, 5])
# => 18
An manchen Tagen ist mehr los als an anderen. Ein Tag mit viel Betrieb ist einer, an dem fünf oder mehr Vögel deinen Garten besucht haben.
Implementiere die Funktion BirdCount.busy_days/1. Sie soll eine Liste der täglichen Vogelzahlen entgegennehmen und die Anzahl der Tage mit viel Betrieb zurückgeben.
BirdCount.busy_days([4, 5, 0, 0, 6])
# => 2
Melde dich bei Exercism an, um Elixir mit 58 Konzepte168 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.