Οι αναδρομικές συναρτήσεις είναι συναρτήσεις που καλούν τον εαυτό τους.
Μια αναδρομική συνάρτηση πρέπει να έχει τουλάχιστον μία βασική περίπτωση και τουλάχιστον μία αναδρομική περίπτωση.
Μια βασική περίπτωση επιστρέφει μια τιμή χωρίς να καλέσει ξανά τη συνάρτηση. Μια αναδρομική περίπτωση καλεί ξανά τη συνάρτηση, τροποποιώντας την είσοδο, ώστε κάποια στιγμή να ταιριάξει με τη βασική περίπτωση.
Πολύ συχνά, κάθε περίπτωση γράφεται σε δική της ρήτρα συνάρτησης.
# base case
def count([]), do: 0
# recursive case
def count([_head | tail]), do: 1 + count(tail)
Είσαι ένας φανατικός παρατηρητής πουλιών και καταγράφεις πόσα πουλιά έχουν επισκεφτεί τον κήπο σου κάθε μέρα.
Αποφάσισες να ανεβάσεις την παρατήρηση πουλιών σε άλλο επίπεδο και να υλοποιήσεις μερικά εργαλεία που θα σε βοηθήσουν να παρακολουθείς και να επεξεργάζεσαι τα δεδομένα.
Έχεις επιλέξει να αποθηκεύσεις τα δεδομένα ως λίστα από ακέραιους αριθμούς. Ο πρώτος αριθμός στη λίστα είναι ο αριθμός των πουλιών που επισκέφτηκαν τον κήπο σου σήμερα, ο δεύτερος χθες, και ούτω καθεξής.
Υλοποίησε τη συνάρτηση BirdCount.today/1. Θα πρέπει να δέχεται μια λίστα με τους ημερήσιους αριθμούς πουλιών και να επιστρέφει τον σημερινό αριθμό. Αν η λίστα είναι κενή, θα πρέπει να επιστρέφει nil.
BirdCount.today([2, 5, 1])
# => 2
Υλοποίησε τη συνάρτηση BirdCount.increment_day_count/1. Θα πρέπει να δέχεται μια λίστα με τους ημερήσιους αριθμούς πουλιών και να αυξάνει τον σημερινό αριθμό κατά 1. Αν η λίστα είναι κενή, επίστρεψε [1].
BirdCount.increment_day_count([4, 0, 2])
# => [5, 0, 2]
Υλοποίησε τη συνάρτηση BirdCount.has_day_without_birds?/1. Θα πρέπει να δέχεται μια λίστα με τους ημερήσιους αριθμούς πουλιών. Θα πρέπει να επιστρέφει true αν υπήρξε τουλάχιστον μία μέρα που κανένα πουλί δεν επισκέφτηκε τον κήπο, και false διαφορετικά.
BirdCount.has_day_without_birds?([2, 0, 4])
# => true
BirdCount.has_day_without_birds?([3, 8, 1, 5])
# => false
Υλοποίησε τη συνάρτηση BirdCount.total/1. Θα πρέπει να δέχεται μια λίστα με τους ημερήσιους αριθμούς πουλιών και να επιστρέφει τον συνολικό αριθμό πουλιών που επισκέφτηκαν τον κήπο σου από τότε που άρχισες να συλλέγεις τα δεδομένα.
BirdCount.total([4, 0, 9, 0, 5])
# => 18
Κάποιες μέρες είναι πιο πολυάσχολες από άλλες. Πολυάσχολη μέρα είναι εκείνη κατά την οποία πέντε ή περισσότερα πουλιά έχουν επισκεφτεί τον κήπο σου.
Υλοποίησε τη συνάρτηση BirdCount.busy_days/1. Θα πρέπει να δέχεται μια λίστα με τους ημερήσιους αριθμούς πουλιών και να επιστρέφει τον αριθμό των πολυάσχολων ημερών.
BirdCount.busy_days([4, 5, 0, 0, 6])
# => 2
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Elixir με 58 έννοιες168 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.