1 00:00:00,000 --> 00:00:05,587 2 00:00:05,587 --> 00:00:07,670 डौग लॉयड: तुम्हें देखा गया है प्रत्यावर्तन पर वीडियो, 3 00:00:07,670 --> 00:00:10,170 पूरी प्रक्रिया के लिए हो सकता है एक छोटा सा जादुई लग रहा था। 4 00:00:10,170 --> 00:00:10,930 यह कैसे काम करता है? 5 00:00:10,930 --> 00:00:15,010 कार्यों को कैसे पता चलेगा कि वे इंतजार और एक अन्य मूल्य के लिए इंतजार करने की जरूरत 6 00:00:15,010 --> 00:00:19,150 एक अलग समारोह से लौटने के लिए हम चाहते हैं कि परिणाम प्राप्त करने के क्रम में कहते हैं? 7 00:00:19,150 --> 00:00:22,550 >> खैर, यह काम करता है कारण है कॉल स्टैक के रूप में जाना जाता है कुछ की। 8 00:00:22,550 --> 00:00:26,360 आप एक समारोह कॉल करते हैं, सिस्टम स्मृति में अंतरिक्ष अलग सेट 9 00:00:26,360 --> 00:00:28,120 उस समारोह के लिए अपने काम करने के लिए। 10 00:00:28,120 --> 00:00:31,720 और हम स्मृति के इन हिस्सा है कि कॉल प्रत्येक कार्य के लिए अलग सेट किया जा रहा है 11 00:00:31,720 --> 00:00:35,670 एक ढेर फ्रेम या एक समारोह फ्रेम कहते हैं। 12 00:00:35,670 --> 00:00:38,290 और आप उम्मीद कर सकते हैं, इन ढेर फ्रेम 13 00:00:38,290 --> 00:00:41,000 स्मृति के ढेर भाग पर रहते हैं। 14 00:00:41,000 --> 00:00:43,960 15 00:00:43,960 --> 00:00:47,540 >> एक से अधिक कार्य ढेर फ्रेम एक निश्चित समय पर स्मृति में मौजूद कर सकते हैं। 16 00:00:47,540 --> 00:00:51,240 मुख्य एक समारोह चाल कहता है, और इस कदम दिशा कहता है, 17 00:00:51,240 --> 00:00:54,460 सभी तीन कार्यों खुला फ्रेम है। 18 00:00:54,460 --> 00:00:57,350 लेकिन वे सक्रिय फ्रेम नहीं सब है। 19 00:00:57,350 --> 00:00:59,410 इन तख्तों एक ढेर में व्यवस्था कर रहे हैं। 20 00:00:59,410 --> 00:01:01,820 और से फ्रेम सबसे हाल ही में बुलाया 21 00:01:01,820 --> 00:01:04,390 समारोह ढेर के शीर्ष पर हमेशा रहा है। 22 00:01:04,390 --> 00:01:07,150 और वह हमेशा सक्रिय फ्रेम है। 23 00:01:07,150 --> 00:01:10,420 केवल वास्तव में कभी भी नहीं है एक समय में सक्रिय है कि समारोह। 24 00:01:10,420 --> 00:01:12,420 यह ढेर के शीर्ष पर एक है। 25 00:01:12,420 --> 00:01:17,620 >> जब एक समारोह में एक और कॉल समारोह में, यह एक तरह से ठहराव दबाता है। 26 00:01:17,620 --> 00:01:20,590 यह एक तरह से इंतज़ार कर रही है, होल्ड पर है। 27 00:01:20,590 --> 00:01:24,050 और एक और ढेर फ्रेम धकेल दिया है यह की चोटी पर ढेर पर। 28 00:01:24,050 --> 00:01:26,150 और कहा कि सक्रिय फ्रेम हो जाता है। 29 00:01:26,150 --> 00:01:28,600 और फ्रेम तुरंत यह इंतजार करने की जरूरत नीचे 30 00:01:28,600 --> 00:01:33,560 इसे फिर से सक्रिय फ्रेम है जब तक वह अपने काम फिर से शुरू कर सकते हैं पहले। 31 00:01:33,560 --> 00:01:35,870 जब एक समारोह है पूर्ण और यह हो चुका है, 32 00:01:35,870 --> 00:01:37,720 अपनी सीमा ढेर बंद popped है। 33 00:01:37,720 --> 00:01:38,950 यही कारण है कि शब्दावली है। 34 00:01:38,950 --> 00:01:41,110 और फ्रेम तुरंत यह नीचे, मैं सिर्फ इतना कहा, के रूप में 35 00:01:41,110 --> 00:01:42,880 नई सक्रिय फ्रेम हो जाता है। 36 00:01:42,880 --> 00:01:45,960 >> और यह एक और समारोह कहता है, इसे फिर से थामने के लिए जा रहा है। 37 00:01:45,960 --> 00:01:49,290 यही कारण है कि नए कार्य के ढेर बनायेगी ढेर के शीर्ष पर धकेल दिया जा सकता है। 38 00:01:49,290 --> 00:01:50,650 यह अपने काम करता हूँ। 39 00:01:50,650 --> 00:01:52,100 यह बंद वापस पॉप हो सकता है। 40 00:01:52,100 --> 00:01:55,630 और अन्य समारोह नीचे इसे फिर से शुरू कर सकते हैं। 41 00:01:55,630 --> 00:02:00,080 >> तो चलो देख, फिर इस के माध्यम से चलते हैं भाज्य समारोह के विचार पर 42 00:02:00,080 --> 00:02:03,070 हम में परिभाषित किया है कि प्रत्यावर्तन वीडियो देखने के लिए 43 00:02:03,070 --> 00:02:07,770 वास्तव में यह कैसे पीछे जादू पुनरावर्ती प्रक्रिया जगह ले जा रहा है। 44 00:02:07,770 --> 00:02:09,870 तो यह हमारे पूरे फाइल, है ना? 45 00:02:09,870 --> 00:02:14,000 हम दो परिभाषित मुख्य और तथ्य functions--। 46 00:02:14,000 --> 00:02:15,980 और हम उम्मीद कर सकते हैं, किसी भी सी प्रोग्राम जा रहा है 47 00:02:15,980 --> 00:02:18,470 मुख्य की पहली पंक्ति में शुरू करने के लिए। 48 00:02:18,470 --> 00:02:21,660 >> इसलिए हम मुख्य लिए एक नया ढेर फ्रेम बनाने के लिए। 49 00:02:21,660 --> 00:02:23,320 और यह चल रहा शुरू करने जा रहा है। 50 00:02:23,320 --> 00:02:25,270 मुख्य कॉल printf। 51 00:02:25,270 --> 00:02:29,390 और printf करने जा रहा है 5 के भाज्य बाहर प्रिंट। 52 00:02:29,390 --> 00:02:31,440 खैर, यह पता नहीं है 5 क्या भाज्य है, 53 00:02:31,440 --> 00:02:35,620 और इसलिए इस फोन में पहले से ही है एक अन्य समारोह में बुलाने पर निर्भर करता है। 54 00:02:35,620 --> 00:02:37,270 तो मुख्य सही वहाँ थामने के लिए जा रहा है। 55 00:02:37,270 --> 00:02:39,103 मैं छोड़ने वाला हूँ अपने वहीं रंग तीर 56 00:02:39,103 --> 00:02:41,360 यह रूप में एक ही रंग सही पर फ्रेम ढेर, 57 00:02:41,360 --> 00:02:47,720 मुख्य फ्रीज करने के लिए जा रहा है कि इंगित करने के लिए 5 के भाज्य कहा जाता है, जबकि यहाँ। 58 00:02:47,720 --> 00:02:49,300 >> तो 5 के भाज्य कहा जाता है। 59 00:02:49,300 --> 00:02:53,160 और यह बहुत ही में शुरू हो रहा है भाज्य समारोह की शुरुआत। 60 00:02:53,160 --> 00:02:55,440 यह सवाल मैं 1 के बराबर रहा हूँ पूछता है? 61 00:02:55,440 --> 00:02:56,810 1 के बराबर 5 है? 62 00:02:56,810 --> 00:02:57,410 अच्छा नहीं। 63 00:02:57,410 --> 00:03:01,110 तो यह करने के लिए नीचे जाने के लिए जा रहा है बाकी हिस्सा, बदले n बार 64 00:03:01,110 --> 00:03:02,990 n शून्य से 1 के भाज्य। 65 00:03:02,990 --> 00:03:03,490 अच्छी तरह से ठीक है। 66 00:03:03,490 --> 00:03:07,070 >> तो अब, 5 के भाज्य है एक और फोन पर निर्भर करता है 67 00:03:07,070 --> 00:03:09,740 गुजर रहा है, भाज्य के लिए पैरामीटर के रूप में 4 में। 68 00:03:09,740 --> 00:03:14,210 और तो भाज्य की 5 फ्रेम, लाल फ्रेम कि, 69 00:03:14,210 --> 00:03:17,160 सही वहाँ फ्रीज करने के लिए जा रहा है कि लाइन पर मैंने संकेत दिया है 70 00:03:17,160 --> 00:03:21,914 और खत्म करने के लिए 4 से भाज्य के लिए इंतजार यह तो ऐसा लगता है कि यह क्या करने की जरूरत 71 00:03:21,914 --> 00:03:23,330 सक्रिय फ्रेम फिर से बन सकता है। 72 00:03:23,330 --> 00:03:26,890 >> तो कम से 4 शुरू की भाज्य भाज्य की शुरुआत। 73 00:03:26,890 --> 00:03:28,556 1 के बराबर 4 है? 74 00:03:28,556 --> 00:03:30,180 कोई है, तो यह एक ही बात करने जा रहा है। 75 00:03:30,180 --> 00:03:31,590 यह किसी और शाखा नीचे जाने के लिए जा रहा है। 76 00:03:31,590 --> 00:03:33,240 यह कोड की है कि लाइन को पाने के लिए जा रहा है। 77 00:03:33,240 --> 00:03:35,710 ठीक है, मैं चार बार वापस करने के लिए जा रहा हूँ। 78 00:03:35,710 --> 00:03:41,270 ओह, 3-- के भाज्य इतनी के भाज्य 4 3 परिष्करण के भाज्य पर निर्भर करता है। 79 00:03:41,270 --> 00:03:43,055 >> और इसलिए यह 3 से भाज्य फोन करने की जरूरत है। 80 00:03:43,055 --> 00:03:45,180 और उस वाला के माध्यम से जाना है फिर से वही प्रक्रिया। 81 00:03:45,180 --> 00:03:48,200 यह के माध्यम से शुरू होता है यहाँ हो जाता है। 82 00:03:48,200 --> 00:03:50,980 3 के भाज्य निर्भर करता है 1 के भाज्य पर। 83 00:03:50,980 --> 00:03:53,750 2 शुरू की तो भाज्य, यहाँ हो जाता है। 84 00:03:53,750 --> 00:03:56,310 यह 1 के भाज्य पर निर्भर करता है। 85 00:03:56,310 --> 00:03:57,430 शुरू होता है 1 के भाज्य। 86 00:03:57,430 --> 00:03:57,650 >> ठीक। 87 00:03:57,650 --> 00:03:59,775 तो अब, हम कर रहे हैं कहीं से दिलचस्प है, है ना? 88 00:03:59,775 --> 00:04:02,190 तो अब, 1 1 के बराबर है। 89 00:04:02,190 --> 00:04:05,130 और इसलिए हम एक वापसी। 90 00:04:05,130 --> 00:04:06,770 इस बिंदु पर, हम लौट रहे हैं। 91 00:04:06,770 --> 00:04:07,880 समारोह हो चुका है। 92 00:04:07,880 --> 00:04:11,140 यह व्यवहार वहाँ है- यह करने के लिए और कुछ नहीं, 93 00:04:11,140 --> 00:04:17,006 और इतने ढेर फ्रेम के लिए 1 के भाज्य बंद चबूतरे। 94 00:04:17,006 --> 00:04:17,589 यह खत्म हो गया है। 95 00:04:17,589 --> 00:04:19,480 यह 1 लौट आए। 96 00:04:19,480 --> 00:04:23,370 और अब, 2 की भाज्य, जो फ्रेम यह नीचे तुरंत था 97 00:04:23,370 --> 00:04:26,160 ढेर में, सक्रिय फ्रेम हो जाता है। 98 00:04:26,160 --> 00:04:29,030 >> और इसे उठा सकते हैं वास्तव में यह कहाँ दूर छोड़ दिया। 99 00:04:29,030 --> 00:04:32,240 यह एक भाज्य के लिए इंतजार कर रहा है 1 से अपना काम खत्म करने के लिए। 100 00:04:32,240 --> 00:04:33,610 अब यह खत्म हो गया है। 101 00:04:33,610 --> 00:04:35,510 और हम भी यहां आ गए। 102 00:04:35,510 --> 00:04:38,080 >> 1 के भाज्य 1 का मान लौट आए। 103 00:04:38,080 --> 00:04:42,430 2 सकते हैं की तो भाज्य कहते हैं 2 बार 1 वापसी। 104 00:04:42,430 --> 00:04:43,680 इसका काम अब किया जाता है। 105 00:04:43,680 --> 00:04:49,110 यह भाज्य के लिए 2 वापस आ रहा है 3 की है, इसके लिए इंतजार कर रहा था, जो। 106 00:04:49,110 --> 00:04:53,370 3 के भाज्य अब शीर्ष फ्रेम है, ढेर में सक्रिय फ्रेम। 107 00:04:53,370 --> 00:04:58,617 और तो यह ठीक है, ठीक है, मैं जा रहा हूँ, कहते हैं 6 है, जो 3 गुना 2, लौटने के लिए। 108 00:04:58,617 --> 00:05:00,700 और मुझे लगता है कि देने जा रहा हूँ भाज्य वापस करने के लिए अधिक मूल्य 109 00:05:00,700 --> 00:05:03,430 4 की, मेरे लिए इंतजार कर रहा है, जो। 110 00:05:03,430 --> 00:05:04,500 मेरा काम हो गया। 111 00:05:04,500 --> 00:05:09,410 3 के भाज्य ढेर बंद चबूतरे, और 4 के भाज्य अब सक्रिय फ्रेम है। 112 00:05:09,410 --> 00:05:13,510 >> 4 ठीक है, मैं 4 बार वापस करने के लिए जा रहा हूँ, कहते हैं छह साल का था, जो 3 से भाज्य,। 113 00:05:13,510 --> 00:05:15,980 यही कारण है कि मूल्य का था कि 3 से भाज्य लौट आए। 114 00:05:15,980 --> 00:05:19,010 और तो 4 बार 6 24 है। 115 00:05:19,010 --> 00:05:20,990 और मैं पारित करने के लिए जा रहा हूँ कि वापस भाज्य के लिए 116 00:05:20,990 --> 00:05:23,160 5 की, मेरे लिए इंतजार कर रहा है, जो। 117 00:05:23,160 --> 00:05:25,270 5 के भाज्य अब सक्रिय फ्रेम है। 118 00:05:25,270 --> 00:05:30,700 यह 5 बार वापस करने के लिए जा रहा है 4-- 5 बार 24 या 120-- के भाज्य 119 00:05:30,700 --> 00:05:32,722 और कहा कि मूल्य देना पीठ है, जो मुख्य करने के लिए 120 00:05:32,722 --> 00:05:35,680 एक के लिए बहुत धैर्य से इंतजार कर रहे थे ढेर के नीचे लंबे समय से। 121 00:05:35,680 --> 00:05:36,640 >> इसे शुरू कर दिया है, जहां यह है। 122 00:05:36,640 --> 00:05:37,670 यह इस फोन कर दिया। 123 00:05:37,670 --> 00:05:39,400 कई फ्रेम शीर्ष पर पदभार संभाल लिया है। 124 00:05:39,400 --> 00:05:41,890 अब यह वापस ढेर के शीर्ष पर है। 125 00:05:41,890 --> 00:05:43,450 यह सक्रिय फ्रेम है। 126 00:05:43,450 --> 00:05:47,810 तो मुख्य मूल्य को मिला 120 वापस 5 के भाज्य से। 127 00:05:47,810 --> 00:05:50,750 यह करने के लिए इंतजार कर रहा है कि मूल्य प्रिंट आउट। 128 00:05:50,750 --> 00:05:51,657 और फिर यह हो चुका है। 129 00:05:51,657 --> 00:05:53,240 मुख्य में कोड के अधिक लाइनों कोई नहीं है। 130 00:05:53,240 --> 00:05:56,800 तो चलो मुख्य फ्रेम बंद चबूतरे ढेर, और हम कर रहे हैं। 131 00:05:56,800 --> 00:05:58,992 >> प्रत्यावर्तन कैसे काम करता है और वह है। 132 00:05:58,992 --> 00:06:00,200 यही कारण है कि ढेर फ्रेम कैसे काम करते हैं। 133 00:06:00,200 --> 00:06:03,120 उन समारोह कॉल कि पहले हुआ 134 00:06:03,120 --> 00:06:06,620 , बस ठहराव पर कर रहे हैं इंतजार कर बाद में कॉल के लिए 135 00:06:06,620 --> 00:06:12,050 इसलिए वे सक्रिय हो सकते हैं समाप्त करने के लिए फ्रेम और वे क्या करने की जरूरत खत्म। 136 00:06:12,050 --> 00:06:13,060 >> मैं डौग लॉयड हूँ। 137 00:06:13,060 --> 00:06:14,880 इस CS50 है। 138 00:06:14,880 --> 00:06:16,580