DOUG لويد: إذا كنت قد رأيت الفيديو على العودية، قد يكون العملية برمتها بدا السحرية قليلا. كيف تعمل؟ كيف وظائف يعرفون أنهم في حاجة إلى الانتظار والانتظار لقيمة أخرى للعودة من وظيفة مختلفة دعوة من أجل الحصول على النتيجة التي نريدها؟ حسنا، والسبب يعمل هذا لأن من ما يعرف باسم مكدس الاستدعاءات. عند استدعاء الدالة، يحدد نظام جانبا مساحة في الذاكرة لذلك وظيفة للقيام بعملها. ونحن نطلق على هذه أجزاء من الذاكرة التي يتم تخصيص لكل وظيفة استدعاء إطار مكدس أو إطار وظيفة. وكما قد تتوقع، هذه الأطر كومة يعيش على الجزء كومة من الذاكرة. 

أكثر من وظيفة واحدة إطار مكدس يمكن أن توجد في الذاكرة في وقت معين. إذا يدعو الرئيسي وظيفة الخطوة، ويدعو حركة الاتجاه، جميع الوظائف الثلاث الإطارات المفتوحة. لكنهم لا جميعا الإطارات النشطة. يتم ترتيب هذه الأطر في كومة. والإطار من دعا مؤخرا الوظيفة هي دائما على قمة المكدس. وهذا هو دائما الإطار النشط. هناك في الواقع سوى واحد من أي وقت مضى وظيفة هذا نشطة في وقت واحد. انها واحدة على رأس المكدس. 

عندما تدعو وظيفة أخرى وظيفة، فإنه نوع من يضغط وقفة. انها نوع من قيد الانتظار، والانتظار. ويتم الضغط إطار مكدس أخرى إلى المكدس على أعلى من ذلك. وأن يصبح الإطار النشط. والإطار فورا أقل من ذلك يحتاج الى الانتظار حتى أنه مرة أخرى الإطار النشط قبل أن تتمكن من استئناف عملها. عندما الوظيفة كاملة وانها فعلت، وبرزت إطاره إيقاف المكدس. هذا المصطلح. والإطار فورا أقل من ذلك، كما أسلفت، يصبح الإطار النشط الجديد. 

وإذا كان يدعو وظيفة أخرى، انها سوف توقف مرة أخرى. سوف إطار مكدس تلك الوظيفة الجديدة يتم دفعها على الجزء العلوي من المكدس. انها سوف تقوم بعملها. قد البوب ​​التراجع. وظيفة أخرى دون أن تتمكن من استئناف مرة أخرى. 

لذلك دعونا نذهب من خلال هذا مرة أخرى، وتبحث على فكرة وظيفة عاملية أننا المحددة في العودية الفيديو لرؤية بالضبط كيف السحر وراء هذا تتخذ عملية متكررة مكان. لذلك هذا هو ملف لدينا كامل، أليس كذلك؟ حددنا اثنين functions-- الرئيسية والواقع. وكما يمكن أن نتوقع، أي برنامج C يسير أن تبدأ في السطر الأول من الصفحة الرئيسية. 

لذلك نحن خلق إطار مكدس جديد للرئيسية. وانها سوف تبدأ تشغيل. دعوات الرئيسية printf. وprintf هو الذهاب الى طباعة مضروب 5. كذلك، فإنه لا يعرف ما مضروب 5 غير، وحتى هذه الدعوة بالفعل اعتمادا على استدعاء دالة أخرى. لذا الرئيسي هو الذهاب الى وقفة حق هناك. أنا ستعمل ترك لها السهم هناك حق، لون انها نفس لون كومة الإطار على حق، للإشارة إلى أن الرئيسي هو الذهاب الى تجميد هنا في حين يسمى مضروب 5. 

لذلك مضروب من 5 يسمى. وانها سوف تبدأ في غاية ابتداء من وظيفة عاملية. فإنه يسأل السؤال أنا يساوي 1؟ هو 5 يساوي 1؟ حسنا، لا. لذلك سيكون النزول إلى في آخر جزء، وعودة 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. انها في انتظار ل طباعة تلك القيمة. ثم انها فعلت. ليس هناك مزيد من الأسطر من التعليمات البرمجية في الرئيسية. لذلك الإطار الرئيسي للملوثات العضوية الثابتة قبالة المكدس، ونحن القيام به. 

وهذه هي الطريقة التي تعمل العودية. هذه هي الطريقة التي تعمل إطارات المكدس. تلك المكالمات وظيفة ما حدث في السابق ليست سوى على وقفة، والانتظار لالمكالمات اللاحقة لإنهاء بحيث أنها يمكن أن تصبح نشطة تأطير وإنهاء ما يتعين عليهم القيام به. 

أنا دوغ ويد. هذا هو CS50.