Συγκριτικό διάγραμμα
Βάση για σύγκριση | Αναδρομή | Επανάληψη |
---|---|---|
Βασικός | Η δήλωση σε ένα σώμα της συνάρτησης καλεί την ίδια τη λειτουργία. | Επιτρέπει την επανειλημμένη εκτέλεση του συνόλου των εντολών. |
Μορφή | Στην επαναληπτική λειτουργία, καθορίζεται μόνο η κατάσταση τερματισμού (βασική περίπτωση). | Η επανάληψη περιλαμβάνει την αρχικοποίηση, την κατάσταση, την εκτέλεση της εντολής εντός του βρόχου και την ενημέρωση (αυξήσεις και μειώσεις) της μεταβλητής ελέγχου. |
Λήξη | Μια συνθήκη υπό όρους περιλαμβάνεται στο σώμα της συνάρτησης για να αναγκάσει τη λειτουργία να επιστρέψει χωρίς να γίνει επανάληψη κλήσης. | Η εντολή επανάληψης εκτελείται επανειλημμένα μέχρι να επιτευχθεί μια συγκεκριμένη συνθήκη. |
Κατάσταση | Εάν η συνάρτηση δεν συγκλίνει σε κάποια κατάσταση που καλείται (βασική περίπτωση), οδηγεί σε άπειρη επανάληψη. | Εάν η συνθήκη ελέγχου στην εντολή επανάληψης δεν γίνει ποτέ ψευδής, οδηγεί σε άπειρη επανάληψη. |
Άπειρη επανάληψη | Η απεριόριστη υποτροπή μπορεί να καταρρεύσει το σύστημα. | Ο ατελής βρόχος χρησιμοποιεί τους κύκλους CPU επανειλημμένα. |
Εφαρμοσμένος | Η επανάληψη εφαρμόζεται πάντα στις λειτουργίες. | Η επανάληψη εφαρμόζεται σε δηλώσεις επανάληψης ή "βρόχους". |
Σωρός | Η στοίβα χρησιμοποιείται για την αποθήκευση του συνόλου νέων τοπικών μεταβλητών και παραμέτρων κάθε φορά που ονομάζεται η συνάρτηση. | Δεν χρησιμοποιεί στοίβα. |
Πάνω από το κεφάλι | Η επανάληψη έχει τα γενικά έξοδα επαναλαμβανόμενων κλήσεων λειτουργίας. | Δεν υπάρχει επιβάρυνση επαναλαμβανόμενης κλήσης λειτουργίας. |
Ταχύτητα | Αργή στην εκτέλεση. | Γρήγορα σε εκτέλεση. |
Μέγεθος κώδικα | Η επανάληψη μειώνει το μέγεθος του κώδικα. | Η επανάληψη κάνει τον κώδικα πιο μακρύ. |
Ορισμός της επανάληψης
Το C ++ επιτρέπει μια συνάρτηση να καλείται στον κώδικα του. Αυτό σημαίνει ότι ο ορισμός της λειτουργίας έχει μια κλήση λειτουργίας στον εαυτό της. Μερικές φορές ονομάζεται επίσης " κυκλικός ορισμός ". Το σύνολο των τοπικών μεταβλητών και των παραμέτρων που χρησιμοποιούνται από τη συνάρτηση δημιουργούνται πρόσφατα κάθε φορά που η λειτουργία καλεί και αποθηκεύεται στην κορυφή της στοίβας. Όμως, κάθε φορά που μια συνάρτηση αποκαλείται, δεν δημιουργεί ένα νέο αντίγραφο αυτής της λειτουργίας. Η επαναληπτική λειτουργία δεν μειώνει σημαντικά το μέγεθος του κώδικα και δεν βελτιώνει ακόμη και τη χρήση της μνήμης, αλλά κάνει κάποιες σε σύγκριση με την επανάληψη.
Για να τερματίσετε την επανάληψη, πρέπει να συμπεριλάβετε μια εντολή select στον ορισμό της συνάρτησης για να αναγκαστεί η λειτουργία να επιστρέψει χωρίς να δώσει μια αναδρομική κλήση στον εαυτό της. Η απουσία της επιλεγμένης δήλωσης στον ορισμό μιας επαναλαμβανόμενης συνάρτησης θα αφήσει τη λειτουργία σε άπειρη επανάληψη μόλις κάλεσε.
Ας κατανοήσουμε την επανάληψη με μια συνάρτηση η οποία θα επιστρέψει τον παράγοντα του αριθμού.
int factorial (int num) {int απάντηση; αν (num == 1) {επιστροφή 1; } else {απάντηση = παράγοντας (num-1) * num; // επαναλαμβανόμενη κλήση} επιστροφή (απάντηση)? }}
Στον παραπάνω κώδικα, η δήλωση σε άλλο μέρος δείχνει την επανάληψη, καθώς η εντολή ονομάζει την παράμετρο factorial () στην οποία βρίσκεται.
Ορισμός της επανάληψης
Η επανάληψη είναι μια διαδικασία εκτέλεσης του συνόλου των εντολών επανειλημμένα, μέχρι να γίνει ψευδής η προϋπόθεση στην επανάληψη. Η πρόταση επανάληψης περιλαμβάνει την αρχικοποίηση, τη σύγκριση, την εκτέλεση των δηλώσεων μέσα στην εντολή επανάληψης και τέλος την ενημέρωση της μεταβλητής ελέγχου. Αφού ενημερωθεί η μεταβλητή ελέγχου, συγκρίνεται ξανά και η διαδικασία επαναλαμβάνεται, έως ότου η κατάσταση στην επανάληψη αποδειχθεί λανθασμένη. Οι δηλώσεις επανάληψης είναι "για" βρόχο, "ενώ" loop, "do-while" βρόχο.
Η εντολή επανάληψης δεν χρησιμοποιεί μια στοίβα για την αποθήκευση των μεταβλητών. Ως εκ τούτου, η εκτέλεση της δήλωσης επανάληψης είναι ταχύτερη σε σχέση με την επαναλαμβανόμενη λειτουργία. Ακόμη και η λειτουργία επανάληψης δεν έχει την επιβάρυνση της επαναλαμβανόμενης κλήσης λειτουργίας, η οποία επίσης καθιστά την εκτέλεση της ταχύτερη από την επαναλαμβανόμενη λειτουργία. Η επανάληψη τερματίζεται όταν η κατάσταση ελέγχου γίνει ψευδής. Η απουσία ελέγχου στις δηλώσεις επανάληψης μπορεί να οδηγήσει σε άπειρο βρόχο ή μπορεί να προκαλέσει σφάλμα κατά τη συμπλήρωση.
Ας καταλάβουμε την επανάληψη σχετικά με το παραπάνω παράδειγμα.
int factorial (int num) {int απάντηση = 1; // χρειάζεται αρχικοποίηση επειδή μπορεί να περιέχει μια τιμή σκουπιδιών πριν από την αρχικοποίησή της για (int t = 1; t> num; t ++) // επανάληψη {answer = answer * (t); επιστροφή (απάντηση); }}
Στον παραπάνω κώδικα, η συνάρτηση επιστρέφει τον παράγοντα του αριθμού χρησιμοποιώντας την πρόταση επανάληψης.
Βασικές διαφορές μεταξύ επαναφοράς και επανάληψης
- Η επανάληψη είναι όταν μια μέθοδος σε ένα πρόγραμμα επαναλαμβάνεται κατ 'επανάληψη ενώ η επανάληψη είναι όταν εκτελείται επανειλημμένα ένα σύνολο οδηγιών σε ένα πρόγραμμα.
- Μια αναδρομική μέθοδος περιέχει ένα σύνολο οδηγιών, μια κλήση δήλωσης και μια συνθήκη τερματισμού ενώ οι δηλώσεις επανάληψης περιέχουν αρχικοποίηση, αύξηση, συνθήκη, σύνολο εντολών εντός ενός βρόχου και μια μεταβλητή ελέγχου.
- Μια υπό όρους δήλωση αποφασίζει ότι ο τερματισμός της αναδρομής και η τιμή της μεταβλητής ελέγχου αποφασίζουν τον τερματισμό της δήλωσης επανάληψης.
- Εάν η μέθοδος δεν οδηγεί σε συνθήκες τερματισμού, εισέρχεται σε άπειρη επανάληψη. Από την άλλη πλευρά, αν η μεταβλητή ελέγχου ουδέποτε οδηγεί στην τιμή τερματισμού, η εντολή επανάληψης επαναλαμβάνεται απεριόριστα.
- Η απεριόριστη επανάληψη μπορεί να οδηγήσει σε συντριβή του συστήματος, ενώ η άπειρη επανάληψη καταναλώνει κύκλους CPU.
- Η επανάληψη εφαρμόζεται πάντα στη μέθοδο ενώ η επανάληψη εφαρμόζεται σε σύνολο οδηγιών.
- Οι μεταβλητές που δημιουργούνται κατά τη διάρκεια της επανάληψης αποθηκεύονται στη στοίβα, ενώ η επανάληψη δεν απαιτεί στοίβα.
- Η επανάληψη προκαλεί την επιβάρυνση της επαναλαμβανόμενης κλήσης λειτουργίας, ενώ η επανάληψη δεν έχει λειτουργία που καλεί εναέρια.
- Λόγω της λειτουργίας που καλεί την εναέρια εκτέλεση της επανάληψης είναι πιο αργή, ενώ η εκτέλεση της επανάληψης είναι ταχύτερη.
- Η επανάληψη μειώνει το μέγεθος του κώδικα ενώ οι επαναλήψεις καθιστούν έναν κώδικα μεγαλύτερο.
Συμπέρασμα:
Η αναδρομική λειτουργία είναι εύκολο να γραφτεί, αλλά δεν λειτουργεί καλά σε σύγκριση με την επανάληψη ενώ η επανάληψη είναι δύσκολο να γραφτεί αλλά η απόδοσή τους είναι καλή σε σύγκριση με την επανάληψη.