Επειδή το functional programing είναι πιο όμορφο από τα loops, προσπάθησα να βρώ μια συνάρτηση που να παράγει ένα συγκεκριμένο αριθμο fibonacci με χρήση αυτοαναφερόμενων συναρτήσεων χωρίς να κάνει διπλή αυτοαναφορά έτσι ώστε να είναι το ίδιο γρήγορη με τη χρήση loop. Δεν βρήκα πουθενά, οπότε έφτιαξα τη δικιά μου, μόνο 5 γραμμές κώδικα:
unsigned long fibonacci_rec(char x) {
static unsigned long p1,p2;
if (x==0) return (p2=0, p1=0);
if (x==1) return (p2=0, p1=1);
unsigned long i=fibonacci_rec(x-1)+p2;
return (p2=p1, p1=i);
}
Και είναι το ίδιο γρήγορη με την κλασσική έκδοση με λούπες.
unsigned long fibonacci_rec(char x) {
static unsigned long p1,p2;
if (x==0) return (p2=0, p1=0);
if (x==1) return (p2=0, p1=1);
unsigned long i=fibonacci_rec(x-1)+p2;
return (p2=p1, p1=i);
}
Και είναι το ίδιο γρήγορη με την κλασσική έκδοση με λούπες.
Σχόλια