A rekurzív függvények olyan függvények, amelyek meghívják önmagukat.
Egy rekurzív függvénynek legalább egy alapesetre és legalább egy rekurzív esetre van szüksége.
Az alapeset úgy ad vissza egy értéket, hogy nem hívja meg újra a függvényt. A rekurzív eset újra meghívja a függvényt, és közben úgy módosítja a bemenetet, hogy az előbb-utóbb megfeleljen az alapesetnek.
Nagyon gyakran külön függvényklózban írjuk meg az egyes eseteket.
# base case
def count([]), do: 0
# recursive case
def count([_head | tail]), do: 1 + count(tail)
Szenvedélyes madármegfigyelő vagy, aki számon tartja, hány madár látogatta meg a kertedet egy-egy napon.
Úgy döntöttél, hogy új szintre emeled a madármegfigyelést, és néhány eszközt készítesz, amelyek segítenek nyomon követni és feldolgozni az adatokat.
Úgy döntöttél, hogy az adatokat egész számok listájaként tárolod. A lista első száma a ma meglátogatott madarak száma, a második a tegnapi, és így tovább.
Valósítsd meg a BirdCount.today/1 függvényt. Bemenetként a napi madárszámok listáját kapja, és adja vissza a mai számot. Ha a lista üres, nil-t adjon vissza.
BirdCount.today([2, 5, 1])
# => 2
Valósítsd meg a BirdCount.increment_day_count/1 függvényt. Bemenetként a napi madárszámok listáját kapja, és növelje meg a mai számot 1-gyel. Ha a lista üres, [1]-et adjon vissza.
BirdCount.increment_day_count([4, 0, 2])
# => [5, 0, 2]
Valósítsd meg a BirdCount.has_day_without_birds?/1 függvényt. Bemenetként a napi madárszámok listáját kapja. Adjon vissza true-t, ha legalább egy olyan nap volt, amikor egyetlen madár sem látogatta meg a kertet, egyébként pedig false-t.
BirdCount.has_day_without_birds?([2, 0, 4])
# => true
BirdCount.has_day_without_birds?([3, 8, 1, 5])
# => false
Valósítsd meg a BirdCount.total/1 függvényt. Bemenetként a napi madárszámok listáját kapja, és adja vissza, összesen hány madár látogatta meg a kertedet, amióta elkezdted gyűjteni az adatokat.
BirdCount.total([4, 0, 9, 0, 5])
# => 18
Néhány nap forgalmasabb, mint a többi. Forgalmas napnak az számít, amikor legalább öt madár látogatta meg a kertedet.
Valósítsd meg a BirdCount.busy_days/1 függvényt. Bemenetként a napi madárszámok listáját kapja, és adja vissza a forgalmas napok számát.
BirdCount.busy_days([4, 5, 0, 0, 6])
# => 2
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Elixir nyelvet 58 fogalom168 feladat segítségével, valódi emberi mentorálással, mindez ingyen.