डौग लॉयड: तुम्हें देखा गया है प्रत्यावर्तन पर वीडियो,
पूरी प्रक्रिया के लिए हो सकता है एक छोटा सा जादुई लग रहा था।
यह कैसे काम करता है?
कार्यों को कैसे पता चलेगा कि वे इंतजार और एक अन्य मूल्य के लिए इंतजार करने की जरूरत
एक अलग समारोह से लौटने के लिए हम चाहते हैं कि परिणाम प्राप्त करने के क्रम में कहते हैं?
>> खैर, यह काम करता है कारण है कॉल स्टैक के रूप में जाना जाता है कुछ की।
आप एक समारोह कॉल करते हैं, सिस्टम स्मृति में अंतरिक्ष अलग सेट
उस समारोह के लिए अपने काम करने के लिए।
और हम स्मृति के इन हिस्सा है कि कॉल प्रत्येक कार्य के लिए अलग सेट किया जा रहा है
एक ढेर फ्रेम या एक समारोह फ्रेम कहते हैं।
और आप उम्मीद कर सकते हैं, इन ढेर फ्रेम
स्मृति के ढेर भाग पर रहते हैं।
>> एक से अधिक कार्य ढेर फ्रेम एक निश्चित समय पर स्मृति में मौजूद कर सकते हैं।
मुख्य एक समारोह चाल कहता है, और इस कदम दिशा कहता है,
सभी तीन कार्यों खुला फ्रेम है।
लेकिन वे सक्रिय फ्रेम नहीं सब है।
इन तख्तों एक ढेर में व्यवस्था कर रहे हैं।
और से फ्रेम सबसे हाल ही में बुलाया
समारोह ढेर के शीर्ष पर हमेशा रहा है।
और वह हमेशा सक्रिय फ्रेम है।
केवल वास्तव में कभी भी नहीं है एक समय में सक्रिय है कि समारोह।
यह ढेर के शीर्ष पर एक है।
>> जब एक समारोह में एक और कॉल समारोह में, यह एक तरह से ठहराव दबाता है।
यह एक तरह से इंतज़ार कर रही है, होल्ड पर है।
और एक और ढेर फ्रेम धकेल दिया है यह की चोटी पर ढेर पर।
और कहा कि सक्रिय फ्रेम हो जाता है।
और फ्रेम तुरंत यह इंतजार करने की जरूरत नीचे
इसे फिर से सक्रिय फ्रेम है जब तक वह अपने काम फिर से शुरू कर सकते हैं पहले।
जब एक समारोह है पूर्ण और यह हो चुका है,
अपनी सीमा ढेर बंद popped है।
यही कारण है कि शब्दावली है।
और फ्रेम तुरंत यह नीचे, मैं सिर्फ इतना कहा, के रूप में
नई सक्रिय फ्रेम हो जाता है।
>> और यह एक और समारोह कहता है, इसे फिर से थामने के लिए जा रहा है।
यही कारण है कि नए कार्य के ढेर बनायेगी ढेर के शीर्ष पर धकेल दिया जा सकता है।
यह अपने काम करता हूँ।
यह बंद वापस पॉप हो सकता है।
और अन्य समारोह नीचे इसे फिर से शुरू कर सकते हैं।
>> तो चलो देख, फिर इस के माध्यम से चलते हैं भाज्य समारोह के विचार पर
हम में परिभाषित किया है कि प्रत्यावर्तन वीडियो देखने के लिए
वास्तव में यह कैसे पीछे जादू पुनरावर्ती प्रक्रिया जगह ले जा रहा है।
तो यह हमारे पूरे फाइल, है ना?
हम दो परिभाषित मुख्य और तथ्य functions--।
और हम उम्मीद कर सकते हैं, किसी भी सी प्रोग्राम जा रहा है
मुख्य की पहली पंक्ति में शुरू करने के लिए।
>> इसलिए हम मुख्य लिए एक नया ढेर फ्रेम बनाने के लिए।
और यह चल रहा शुरू करने जा रहा है।
मुख्य कॉल printf।
और printf करने जा रहा है 5 के भाज्य बाहर प्रिंट।
खैर, यह पता नहीं है 5 क्या भाज्य है,
और इसलिए इस फोन में पहले से ही है एक अन्य समारोह में बुलाने पर निर्भर करता है।
तो मुख्य सही वहाँ थामने के लिए जा रहा है।
मैं छोड़ने वाला हूँ अपने वहीं रंग तीर
यह रूप में एक ही रंग सही पर फ्रेम ढेर,
मुख्य फ्रीज करने के लिए जा रहा है कि इंगित करने के लिए 5 के भाज्य कहा जाता है, जबकि यहाँ।
>> तो 5 के भाज्य कहा जाता है।
और यह बहुत ही में शुरू हो रहा है भाज्य समारोह की शुरुआत।
यह सवाल मैं 1 के बराबर रहा हूँ पूछता है?
1 के बराबर 5 है?
अच्छा नहीं।
तो यह करने के लिए नीचे जाने के लिए जा रहा है बाकी हिस्सा, बदले n बार
n शून्य से 1 के भाज्य।
अच्छी तरह से ठीक है।
>> तो अब, 5 के भाज्य है एक और फोन पर निर्भर करता है
गुजर रहा है, भाज्य के लिए पैरामीटर के रूप में 4 में।
और तो भाज्य की 5 फ्रेम, लाल फ्रेम कि,
सही वहाँ फ्रीज करने के लिए जा रहा है कि लाइन पर मैंने संकेत दिया है
और खत्म करने के लिए 4 से भाज्य के लिए इंतजार यह तो ऐसा लगता है कि यह क्या करने की जरूरत
सक्रिय फ्रेम फिर से बन सकता है।
>> तो कम से 4 शुरू की भाज्य भाज्य की शुरुआत।
1 के बराबर 4 है?
कोई है, तो यह एक ही बात करने जा रहा है।
यह किसी और शाखा नीचे जाने के लिए जा रहा है।
यह कोड की है कि लाइन को पाने के लिए जा रहा है।
ठीक है, मैं चार बार वापस करने के लिए जा रहा हूँ।
ओह, 3-- के भाज्य इतनी के भाज्य 4 3 परिष्करण के भाज्य पर निर्भर करता है।
>> और इसलिए यह 3 से भाज्य फोन करने की जरूरत है।
और उस वाला के माध्यम से जाना है फिर से वही प्रक्रिया।
यह के माध्यम से शुरू होता है यहाँ हो जाता है।
3 के भाज्य निर्भर करता है 1 के भाज्य पर।
2 शुरू की तो भाज्य, यहाँ हो जाता है।
यह 1 के भाज्य पर निर्भर करता है।
शुरू होता है 1 के भाज्य।
>> ठीक।
तो अब, हम कर रहे हैं कहीं से दिलचस्प है, है ना?
तो अब, 1 1 के बराबर है।
और इसलिए हम एक वापसी।
इस बिंदु पर, हम लौट रहे हैं।
समारोह हो चुका है।
यह व्यवहार वहाँ है- यह करने के लिए और कुछ नहीं,
और इतने ढेर फ्रेम के लिए 1 के भाज्य बंद चबूतरे।
यह खत्म हो गया है।
यह 1 लौट आए।
और अब, 2 की भाज्य, जो फ्रेम यह नीचे तुरंत था
ढेर में, सक्रिय फ्रेम हो जाता है।
>> और इसे उठा सकते हैं वास्तव में यह कहाँ दूर छोड़ दिया।
यह एक भाज्य के लिए इंतजार कर रहा है 1 से अपना काम खत्म करने के लिए।
अब यह खत्म हो गया है।
और हम भी यहां आ गए।
>> 1 के भाज्य 1 का मान लौट आए।
2 सकते हैं की तो भाज्य कहते हैं 2 बार 1 वापसी।
इसका काम अब किया जाता है।
यह भाज्य के लिए 2 वापस आ रहा है 3 की है, इसके लिए इंतजार कर रहा था, जो।
3 के भाज्य अब शीर्ष फ्रेम है, ढेर में सक्रिय फ्रेम।
और तो यह ठीक है, ठीक है, मैं जा रहा हूँ, कहते हैं 6 है, जो 3 गुना 2, लौटने के लिए।
और मुझे लगता है कि देने जा रहा हूँ भाज्य वापस करने के लिए अधिक मूल्य
4 की, मेरे लिए इंतजार कर रहा है, जो।
मेरा काम हो गया।
3 के भाज्य ढेर बंद चबूतरे, और 4 के भाज्य अब सक्रिय फ्रेम है।
>> 4 ठीक है, मैं 4 बार वापस करने के लिए जा रहा हूँ, कहते हैं छह साल का था, जो 3 से भाज्य,।
यही कारण है कि मूल्य का था कि 3 से भाज्य लौट आए।
और तो 4 बार 6 24 है।
और मैं पारित करने के लिए जा रहा हूँ कि वापस भाज्य के लिए
5 की, मेरे लिए इंतजार कर रहा है, जो।
5 के भाज्य अब सक्रिय फ्रेम है।
यह 5 बार वापस करने के लिए जा रहा है 4-- 5 बार 24 या 120-- के भाज्य
और कहा कि मूल्य देना पीठ है, जो मुख्य करने के लिए
एक के लिए बहुत धैर्य से इंतजार कर रहे थे ढेर के नीचे लंबे समय से।
>> इसे शुरू कर दिया है, जहां यह है।
यह इस फोन कर दिया।
कई फ्रेम शीर्ष पर पदभार संभाल लिया है।
अब यह वापस ढेर के शीर्ष पर है।
यह सक्रिय फ्रेम है।
तो मुख्य मूल्य को मिला 120 वापस 5 के भाज्य से।
यह करने के लिए इंतजार कर रहा है कि मूल्य प्रिंट आउट।
और फिर यह हो चुका है।
मुख्य में कोड के अधिक लाइनों कोई नहीं है।
तो चलो मुख्य फ्रेम बंद चबूतरे ढेर, और हम कर रहे हैं।
>> प्रत्यावर्तन कैसे काम करता है और वह है।
यही कारण है कि ढेर फ्रेम कैसे काम करते हैं।
उन समारोह कॉल कि पहले हुआ
, बस ठहराव पर कर रहे हैं इंतजार कर बाद में कॉल के लिए
इसलिए वे सक्रिय हो सकते हैं समाप्त करने के लिए फ्रेम और वे क्या करने की जरूरत खत्म।
>> मैं डौग लॉयड हूँ।
इस CS50 है।