DOUG LLOYD: Αν έχετε δει το βίντεο για αναδρομή,
η όλη διαδικασία μπορεί να έχει φάνηκε λίγο μαγικό.
Πώς δουλεύει?
Πώς οι λειτουργίες γνωρίζουν ότι Πρέπει να περιμένουμε και να περιμένετε για μια άλλη αξία
να επιστρέψει από μια διαφορετική λειτουργία καλέσετε για να πάρουμε το αποτέλεσμα που θέλουμε;
>> Λοιπόν, ο λόγος που γίνεται αυτό είναι γιατί κάτι γνωστό ως στοίβα κλήσεων.
Όταν καλείτε μια λειτουργία, η σύστημα ακυρώνει χώρο στη μνήμη
για την εν λόγω λειτουργία για να κάνει τη δουλειά της.
Και λέμε αυτά τα κομμάτια της μνήμης που Οι υπό παύση καλλιέργειας για κάθε λειτουργία
καλέστε ένα πλαίσιο στοίβας ή ένα πλαίσιο λειτουργίας.
Και όπως μπορείτε να φανταστείτε, αυτά τα πλαίσια στοίβα
ζουν από την πλευρά της στοίβας μνήμης.
>> Περισσότερες από μία συνάρτηση πλαίσιο της στοίβας μπορούν να υπάρχουν στη μνήμη σε μια δεδομένη στιγμή.
Αν ο κύριος καλεί μια κίνηση λειτουργία, και καλεί την κατεύθυνση κίνηση,
και οι τρεις λειτουργίες έχουν ανοιχτά πλαίσια.
Αλλά δεν είναι όλα έχουν ενεργά πλαίσια.
Αυτά τα πλαίσια διατεταγμένα σε μια στοίβα.
Και το πλαίσιο από το πιο πρόσφατα που ονομάζεται
η λειτουργία είναι πάντα στην κορυφή της στοίβας.
Και αυτό είναι πάντα το ενεργό πλαίσιο.
Υπάρχει μόνο ποτέ πραγματικά ένα λειτουργία που είναι ενεργή κάθε φορά.
Είναι το ένα στην κορυφή της στοίβας.
>> Όταν μια συνάρτηση καλεί μια άλλη λειτουργία, το είδος πιέζει παύσης.
Το είδος του είναι σε αναμονή, περιμένοντας.
Και ένα άλλο πλαίσιο της στοίβας ωθείται πάνω στην στοίβα πάνω από αυτό.
Και αυτό γίνεται το ενεργό πλαίσιο.
Και το πλαίσιο αμέσως κάτω από αυτό χρειάζεται να περιμένει
έως ότου είναι πάλι το ενεργό πλαίσιο για να μπορέσει να επαναλάβει τις εργασίες της.
Όταν μια λειτουργία πλήρης και έχει κάνει,
Ο σκελετός του έσκασε από την στοίβα.
Αυτή είναι η ορολογία.
Και το πλαίσιο αμέσως κάτω από αυτό, όπως μόλις είπα,
γίνεται ο νέος ενεργού πλαισίου.
>> Και αν αυτό απαιτεί μια άλλη λειτουργία, πρόκειται για παύση και πάλι.
Πλαίσιο της στοίβας ότι η νέα λειτουργία θα να ωθείται πάνω στην κορυφή της στοίβας.
Θα κάνει τη δουλειά της.
Θα μπορούσε να περνάς καλά.
Και η άλλη λειτουργία κάτω από αυτό μπορεί να επαναλάβει και πάλι.
>> Ας πάμε μέσα από αυτό και πάλι, αναζητούν με την ιδέα του παραγοντικού λειτουργίας
ότι ορίσαμε στο αναδρομή για να δείτε το βίντεο
πώς ακριβώς η μαγεία πίσω από αυτό αναδρομική διαδικασία λαμβάνει χώρα.
Έτσι, αυτό είναι ολόκληρο το αρχείο μας, σωστά;
Ορίσαμε δύο functions-- κύρια και πραγματικότητα.
Και όπως θα περίμενε κανείς, οποιοδήποτε πρόγραμμα C θα
να ξεκινούν από την πρώτη γραμμή της κύριας.
>> Έτσι δημιουργούμε ένα νέο πλαίσιο για την κύρια στοίβα.
Και πρόκειται να αρχίσει τρέξιμο.
Κύρια κλήσεις printf.
Και printf πρόκειται να εκτυπώσετε παραγοντικό 5.
Λοιπόν, δεν γνωρίζει τι παραγοντικό 5 είναι,
και έτσι αυτή η πρόσκληση είναι ήδη ανάλογα με άλλη κλήση της συνάρτησης.
Έτσι κύριο πρόκειται να σταματήσετε εκεί.
Είμαι θα αφήσει τους arrow εκεί, το χρώμα
είναι το ίδιο χρώμα με το στοίβα πλαίσιο δεξιά,
για να δείξει ότι ο κύριος πρόκειται να παγώσει εδώ ενώ παραγοντικό 5 λέγεται.
>> Έτσι παραγοντικό 5 λέγεται.
Και πρόκειται να ξεκινήσει στις πολύ αρχίζοντας από την συνάρτηση παραγοντικό.
Ζητά το ερώτημα είμαι ίσος με 1;
Είναι ίση με 5 1;
Λοιπόν όχι.
Έτσι, πρόκειται να πάει κάτω για να το άλλο μέρος, η απόδοση n φορές
παραγοντικό του n μείον 1.
ΕΝΤΑΞΕΙ λοιπον.
>> Έτσι τώρα, παραγοντικό 5 είναι ανάλογα με την άλλη κλήση
σε παραγοντική, περνώντας σε 4 ως παράμετρο.
Και έτσι το παραγοντικό 5 καρέ, ότι το κόκκινο πλαίσιο,
πρόκειται να παγώσει εκεί εκείνη την γραμμή που έχω αναγράφεται
και να περιμένουν για παραγοντικό 4 για να ολοκληρώσετε τι πρέπει να κάνει, έτσι ώστε στη συνέχεια να
μπορεί να γίνει και πάλι το ενεργό πλαίσιο.
>> Έτσι παραγοντικό 4 ξεκινά στις η αρχή του παραγοντικού.
Είναι 4 ίση προς 1;
Όχι, γι 'αυτό πρόκειται να κάνει το ίδιο πράγμα.
Είναι πρόκειται να πάει κάτω από το άλλο υποκατάστημα.
Είναι πρόκειται να πάρει σε αυτή τη γραμμή του κώδικα.
Εντάξει, Πάω να επιστρέψουν τέσσερις φορές.
Ω, παραγοντικό 3-- έτσι παραγοντικό 4 εξαρτάται από το παραγοντικό 3 φινίρισμα.
>> Και γι 'αυτό χρειάζεται να καλέσετε παραγοντικό 3.
Και αυτό θα πάω μέσα η ίδια διαδικασία ξανά.
Ξεκινά μέσα, παίρνει εδώ.
Παραγοντικό 3 εξαρτάται σχετικά με παραγοντικό 1.
Έτσι παραγοντικό 2 εκκινήσεις, παίρνει εδώ.
Εξαρτάται από το παραγοντικό 1.
Παραγοντικό 1 ξεκινά.
>> ΕΝΤΆΞΕΙ.
Έτσι τώρα, παίρνουμε κάπου ενδιαφέρουσα, σωστά;
Μέχρι τώρα, το 1 είναι ίσο με 1.
Και έτσι επανερχόμαστε 1.
Σε αυτό το σημείο, θα επιστρέψουμε.
Η λειτουργία γίνεται.
Είναι η συμπεριφορά is-- υπάρχει τίποτα άλλο για να το κάνετε,
και έτσι το πλαίσιο στοίβας για παραγοντικό 1 σκάει έξω.
Είναι τελειώσει.
Επέστρεψε 1.
Και τώρα, παραγοντικό 2, η οποία ήταν το πλαίσιο αμέσως κάτω από αυτό
στη στοίβα, γίνεται το ενεργό πλαίσιο.
>> Και αυτό μπορεί να πάρει ακριβώς εκεί που σταμάτησε.
Είναι περιμένει για ένα παραγοντικό 1 για να τελειώσει το έργο του.
Έχει πλέον ολοκληρωθεί.
Και έτσι εδώ είμαστε.
>> Παραγοντικό 1 επέστρεψε την τιμή 1.
Έτσι παραγοντικό 2 κονσέρβας ας πούμε επιστρέψει 2 φορές 1.
Το έργο του έχει τελειώσει.
Είναι επέστρεψε 2 παραγοντική του 3, που περιμένουν για αυτό.
Παραγοντικό 3 είναι πλέον η κορυφή του πλαισίου, το ενεργό πλαίσιο στη στοίβα.
Και έτσι, λέει, εντάξει, καλά, θα πάω να επιστρέψει 3 φορές 2, η οποία είναι 6.
Και Πάω να δώσω ότι Εκτιμούμε πίσω στο παραγοντικό
4, που έχει να περιμένει για μένα.
Τελείωσα.
Παραγοντικό 3 σκάει από το σωρό, και παραγοντικό 4 είναι πλέον το ενεργό πλαίσιο.
>> 4 λέει, εντάξει, θα πάω να επιστρέψουν 4 φορές το παραγοντικό του 3, που ήταν έξι.
Αυτό ήταν της αξίας που παραγοντικό 3 επιστρέφονται.
Και έτσι 4 φορές 6 είναι 24.
Και Πάω να περάσει ότι πίσω στην παραγοντική
5, η οποία έχει να περιμένει για μένα.
Παραγοντικό 5 είναι πλέον το ενεργό πλαίσιο.
Είναι πρόκειται να επιστρέψουν 5 φορές παραγοντικό 4-- 5 φορές 24 ή 120--
και να δώσει αυτή την τιμή πίσω στην κύρια, η οποία έχει
περιμένουν πολύ υπομονετικά για ένα μεγάλο χρονικό διάστημα στο κάτω μέρος της στοίβας.
>> Είναι το μέρος όπου ξεκίνησε.
Έκανε αυτό το κάλεσμα.
Αρκετά πλαίσια ανέλαβε στην κορυφή.
Είναι τώρα πίσω στην κορυφή της στοίβας.
Είναι το ενεργό πλαίσιο.
Έτσι, πήρε την κύρια αξία 120 πίσω από το παραγοντικό 5.
Είναι περιμένει να εκτυπώστε αυτή την τιμή.
Και τότε γίνεται.
Δεν Υπάρχουν περισσότερες γραμμές κώδικα σε κύρια.
Έτσι κύριος του πλαισίου σκάει στα ανοικτά η στοίβα, και τελειώσατε.
>> Και αυτό είναι το πώς λειτουργεί αναδρομή.
Αυτό είναι το πώς λειτουργούν τα πλαίσια στοίβα.
Αυτές οι κλήσεις συναρτήσεων αυτό συνέβη στο παρελθόν
είναι ακριβώς σε παύση, περιμένοντας για τις επόμενες κλήσεις
για να ολοκληρωθεί έτσι ώστε να μπορεί να γίνει η ενεργός πλαισιώσει και να τελειώσει αυτό που πρέπει να κάνουμε.
>> Είμαι ο Νταγκ Lloyd.
Αυτό είναι CS50.