Αναδρομικές συναρτήσεις (Recursion)
Γνωρίζουμε ότι μια συνάρτηση μπορεί να καλεί μια άλλη συνάρτηση η οποία (καλούμενη) συνήθως επιστρέφει ένα αποτέλεσμα (μια τιμή). Υπάρχει η περίπτωση όμως μια συνάρτηση να καλεί την ίδια συνάρτηση, δηλαδή να καλεί τον εαυτό της. Τότε η συνάρτηση αυτή λέγεται αναδρομική (recursive).
Σε συντομία, μια αναδρομική δείχνει όπως το παράδειγμα παρακάτω.
Παράδειγμα
void f() { f(); /* η συνάρτηση f καλεί την f */ }
Οι αναδρομικές θέλουν ιδιαίτερη προσοχή διότι εύκολα μπορεί να ξεκινήσουμε έναν ατέρμονα βρόχο. Για αυτό υπάρχει μία συνθήκη που διακόπτει τις συνεχόμενες κλήσεις όταν η συνθήκη ικανοποιηθεί.
Στη συνέχεια δίνονται πρακτικά παραδείγματα όπου οι αναδρομικές συναρτήσεις βρίσκουν εφαρμογή.
Παράδειγμα
Υπολογισμός παραγοντικού ενός αριθμού.
#include <stdio.h> /* η αναδρομική συνάρτηση factorial υπολογίζει το παραγοντικό ενός αριθμού */ int factorial(unsigned int i) { if(i <= 1) { return 1; } return i * factorial(i - 1); } int main() { int f10 = factorial(10); printf("Παραγοντικό του 10: %d\n", f10); return 0; }
Παράδειγμα
Υπολογισμός σειράς Fibonacci. Στο παρακάτω παράδειγμα υπολογίζονται οι 10 πρώτοι αριθμοί από μια σειρά Fibonacci.
#include <stdio.h> int fibonacci(int i) { if(i == 0) { return 0; } if(i == 1) { return 1; } return fibonacci(i-1) + fibonacci(i-2); } int main() { int i; for (i = 0; i < 10; i++) { printf("%d, ", fibonacci(i)); } return 0; }