Επανάληψη (μαθηματικά)

Η επανάληψη (από το λατινικό iterare "επαναλαμβάνω") είναι η επανάληψη μιας διαδικασίας με σκοπό τη δημιουργία μιας (ενδεχομένως απεριόριστης) ακολουθίας αποτελεσμάτων. Κάθε επανάληψη της διαδικασίας είναι μια επανάληψη, και το αποτέλεσμα κάθε επανάληψης είναι το σημείο εκκίνησης της επόμενης επανάληψης.

Στα μαθηματικά και την επιστήμη των υπολογιστών, η επανάληψη (μαζί με τη συναφή τεχνική της αναδρομής) αποτελεί τυπικό στοιχείο των αλγορίθμων.

Μαθηματικά

Η επανάληψη στα μαθηματικά μπορεί να αναφέρεται στη διαδικασία επανάληψης μιας συνάρτησης, δηλαδή στην επαναλαμβανόμενη εφαρμογή μιας συνάρτησης, χρησιμοποιώντας την ίδια επανάληψη στην έξοδο όπως και στην είσοδο. Η επανάληψη φαινομενικά απλών συναρτήσεων μπορεί να οδηγήσει σε πολύπλοκα και δύσκολα προβλήματα - για παράδειγμα, εικασίες Κολάτζ και ζογκλερικές ακολουθίες.

Μια άλλη χρήση της επανάληψης στα μαθηματικά είναι οι επαναληπτικές μέθοδοι που χρησιμοποιούνται για την εύρεση προσεγγιστικών αριθμητικών λύσεων σε ορισμένα μαθηματικά προβλήματα. Η μέθοδος του Νεύτωνα είναι ένα παράδειγμα επαναληπτικής μεθόδου- ο χειροκίνητος υπολογισμός της τετραγωνικής ρίζας ενός αριθμού είναι ένα κοινό και γνωστό παράδειγμα.

Πληροφορική 

Στην πληροφορική, η επανάληψη είναι η τεχνική επισήμανσης ενός μπλοκ εντολών μέσα σε ένα πρόγραμμα υπολογιστή για έναν καθορισμένο αριθμό επαναλήψεων.  Αυτό το μπλοκ δηλώσεων λέγεται ότι επαναλαμβάνεται- ένας επιστήμονας πληροφορικής μπορεί επίσης να αναφέρεται σε αυτό το μπλοκ δηλώσεων ως μια επανάληψη.

Εφαρμογές 
Οι επαναλήψεις αποτελούν τις πιο κοινές γλωσσικές κατασκευές για την εκτέλεση επαναλήψεων. Ο ακόλουθος ψευδοκώδικας επαναλαμβάνει τρεις φορές τη γραμμή κώδικα μεταξύ των αγκυλών μέσω ενός βρόχου for, και χρησιμοποιεί τις τιμές του i ως προσαυξήσεις.

a := 0
for i := 1 to 3 do       {επανάληψη τρεις φορές}
begin
    a := a + i;          {προσθήκη της τρέχουσας τιμής του i στο a}
end;
print(a);                {εμφανίζεται ο αριθμός 6 (0 + 1; 1 + 2; 3 + 3)}

Είναι επιτρεπτό και συχνά απαραίτητο να χρησιμοποιηθούν τιμές από άλλα μέρη του προγράμματος εκτός του μπλοκ εντολών εντός παρενθέσεως, για να εκτελεστεί η επιθυμητή λειτουργία.

Οι επαναλήψεις αποτελούν εναλλακτικές γλωσσικές κατασκευές σε σχέση με τους βρόχους, οι οποίες εξασφαλίζουν συνεπείς επαναλήψεις πάνω σε συγκεκριμένες δομές δεδομένων. Μπορούν τελικά να εξοικονομήσουν χρόνο και προσπάθεια σε μεταγενέστερες προσπάθειες κωδικοποίησης. Συγκεκριμένα, ένας επαναλήπτης επιτρέπει την επανάληψη του ίδιου είδους λειτουργίας σε κάθε κόμβο μιας τέτοιας δομής δεδομένων, συχνά με κάποια προκαθορισμένη σειρά.

Οι επαναλήψεις είναι καθαρά λειτουργικές γλωσσικές κατασκευές, οι οποίες δέχονται ή απορρίπτουν δεδομένα κατά τη διάρκεια των επαναλήψεων.

Σχέση με την αναδρομή
Οι αναδρομές και οι επαναλήψεις έχουν διαφορετικούς αλγοριθμικούς ορισμούς, παρόλο που μπορούν να παράγουν πανομοιότυπα αποτελέσματα. Η κύρια διαφορά είναι ότι η αναδρομή μπορεί να χρησιμοποιηθεί ως λύση χωρίς να γνωρίζουμε εκ των προτέρων πόσες φορές θα πρέπει να επαναληφθεί η ενέργεια, ενώ η επιτυχής επανάληψη απαιτεί αυτή την εκ των προτέρων γνώση.

Ορισμένοι τύποι γλωσσών προγραμματισμού, γνωστοί ως λειτουργικές γλώσσες προγραμματισμού, έχουν σχεδιαστεί με τέτοιο τρόπο ώστε να μην υλοποιούν ένα μπλοκ εντολών για ρητή επανάληψη, όπως συμβαίνει με τον βρόχο for. Αντ' αυτού, αυτές οι γλώσσες προγραμματισμού κάνουν αποκλειστική χρήση της αναδρομής. Αντί να καλούν ένα μπλοκ κώδικα που πρέπει να επαναληφθεί έναν προκαθορισμένο αριθμό φορών, το εκτελούμενο μπλοκ κώδικα "χωρίζει" την εργασία που πρέπει να γίνει σε πολλά διακριτά μέρη, μετά την εκτέλεση των οποίων το κομμάτι κώδικα εκτελείται σε καθένα από αυτά. Κάθε εργασία θα διαιρεθεί επανειλημμένα έως ότου η "ποσότητα" της εργασίας είναι όσο το δυνατόν μικρότερη, επιτρέποντας στον αλγόριθμο να ολοκληρώσει την εργασία πολύ γρήγορα. Στη συνέχεια, ο αλγόριθμος "αντιστρέφει" τη διαδικασία και συναρμολογεί εκ νέου τα μέρη σε ένα πλήρες σύνολο.

Το κλασικό παράδειγμα αναδρομής είναι οι αλγόριθμοι ταξινόμησης λίστας, όπως η ταξινόμηση συγχώνευσης. Ο αναδρομικός αλγόριθμος ταξινόμησης συγχώνευσης θα διαιρέσει πρώτα επανειλημμένα τη λίστα σε διαδοχικά ζεύγη- κάθε ζεύγος ταξινομείται στη συνέχεια, στη συνέχεια κάθε διαδοχικό ζεύγος ζευγών κ.ο.κ. μέχρι τα στοιχεία της λίστας να βρίσκονται στην επιθυμητή σειρά.

Ο κώδικας που ακολουθεί είναι ένα παράδειγμα αναδρομικού αλγορίθμου στη γλώσσα προγραμματισμού Scheme που θα εξάγει το ίδιο αποτέλεσμα με τον ψευδοκώδικα της προηγούμενης επικεφαλίδας.

(let iterate ((i 1) (a 0))
  (if (<= i 3)
    (iterate (+ i 1) (+ a i))
    (display a)))

Εκπαίδευση
Σε ορισμένα σχολικά ιδρύματα, οι επαναλήψεις χρησιμοποιούνται για να περιγράψουν τη διαδικασία διδασκαλίας ή για να ενθαρρύνουν τους μαθητές να επαναλάβουν πειράματα, αξιολογήσεις ή εργασίες μέχρι να βρουν ορθότερα αποτελέσματα ή μέχρι ο μαθητής να αποκτήσει τη σωστή τεχνική. Η ιδέα αυτή συναντάται στην παλιά παροιμία: "Η εξάσκηση τελειοποιεί". Ειδικότερα, ο όρος "επαναληπτική" ορίζεται ως "η διαδικασία μάθησης και ανάπτυξης που περιλαμβάνει τακτική μελέτη".

Δείτε επίσης 
Αναδρομή
Σύνολο Μάντελμπροτ 
Σύνολο Julia
Οικοδομήσιμο Σύμπαν

Παραπομπές

Φράκταλ
Αλγόριθμοι
Διαχείριση χρόνου
Έλεγχος ροής