1 00:00:00,000 --> 00:00:05,587 2 00:00:05,587 --> 00:00:07,670 DOUG LLOYD: Kama wameweza kuona video juu ya kujirudia, 3 00:00:07,670 --> 00:00:10,170 mchakato mzima anaweza kuwa walionekana kidogo kichawi. 4 00:00:10,170 --> 00:00:10,930 Jinsi gani kazi? 5 00:00:10,930 --> 00:00:15,010 Jinsi gani kazi kujua kwamba wao haja ya kusubiri na kusubiri kwa thamani mwingine 6 00:00:15,010 --> 00:00:19,150 kurudi kutoka kazi mbalimbali piga ili kupata matokeo tunataka? 7 00:00:19,150 --> 00:00:22,550 >> Naam, sababu hii kazi ni kwa sababu ya kitu inayojulikana kama wito stack. 8 00:00:22,550 --> 00:00:26,360 Wakati wewe piga kazi, mfumo unaweka kando nafasi katika kumbukumbu 9 00:00:26,360 --> 00:00:28,120 kwa kazi ambayo kwa kufanya kazi yake. 10 00:00:28,120 --> 00:00:31,720 Na tunatoa wito chunks ya kumbukumbu kwamba hawa ni kuwa zilizotengwa kwa ajili ya kila kazi 11 00:00:31,720 --> 00:00:35,670 piga sura stack au sura kazi. 12 00:00:35,670 --> 00:00:38,290 Na kama unaweza kutarajia, muafaka haya mkusanyiko 13 00:00:38,290 --> 00:00:41,000 kuishi juu ya stack sehemu ya kumbukumbu. 14 00:00:41,000 --> 00:00:43,960 15 00:00:43,960 --> 00:00:47,540 >> Kazi zaidi ya moja stack frame unaweza kuwepo katika kumbukumbu kwa wakati huo. 16 00:00:47,540 --> 00:00:51,240 Kama kuu wito kazi hoja, na hoja wito mwelekeo, 17 00:00:51,240 --> 00:00:54,460 kazi zote tatu na muafaka wazi. 18 00:00:54,460 --> 00:00:57,350 Lakini hawana wote wana muafaka kazi. 19 00:00:57,350 --> 00:00:59,410 Muafaka haya ni kupangwa katika stack. 20 00:00:59,410 --> 00:01:01,820 Na sura kutoka hivi karibuni wito 21 00:01:01,820 --> 00:01:04,390 kazi ni daima juu ya stack. 22 00:01:04,390 --> 00:01:07,150 Na kwamba daima ni sura hai. 23 00:01:07,150 --> 00:01:10,420 Kuna tu kwa kweli milele moja kazi hiyo ni kazi kwa wakati. 24 00:01:10,420 --> 00:01:12,420 Ni moja juu ya stack. 25 00:01:12,420 --> 00:01:17,620 >> Wakati kazi wito mwingine kazi, ni aina ya mashinikizo ya kunyamaza. 26 00:01:17,620 --> 00:01:20,590 Ni aina ya ni juu ya umiliki, kusubiri. 27 00:01:20,590 --> 00:01:24,050 Na sura nyingine stack ni kusukuma kwenye stack juu yake. 28 00:01:24,050 --> 00:01:26,150 Na kwamba inakuwa sura hai. 29 00:01:26,150 --> 00:01:28,600 Na sura mara moja chini inahitaji kusubiri 30 00:01:28,600 --> 00:01:33,560 mpaka ni tena sura hai kabla ya kuanza kazi yake. 31 00:01:33,560 --> 00:01:35,870 Wakati kazi ni kamili na ni kosa, 32 00:01:35,870 --> 00:01:37,720 sura yake ni popped mbali stack. 33 00:01:37,720 --> 00:01:38,950 Hiyo ni istilahi. 34 00:01:38,950 --> 00:01:41,110 Na sura mara moja chini yake, kama mimi tu alisema, 35 00:01:41,110 --> 00:01:42,880 inakuwa mpya kazi sura. 36 00:01:42,880 --> 00:01:45,960 >> Na kama ni wito kazi nyingine, itakuja kutulia tena. 37 00:01:45,960 --> 00:01:49,290 Stack frame kwamba kazi mpya mapenzi kusukuma kwenye kilele cha stack. 38 00:01:49,290 --> 00:01:50,650 Ni itabidi kufanya kazi yake. 39 00:01:50,650 --> 00:01:52,100 Ni inaweza pop nyuma mbali. 40 00:01:52,100 --> 00:01:55,630 Na kazi nyingine chini inaweza kuendelea tena. 41 00:01:55,630 --> 00:02:00,080 >> Basi hebu kwenda kwa njia hii tena, kuangalia katika wazo la kazi factorial 42 00:02:00,080 --> 00:02:03,070 kwamba sisi inavyoelezwa katika kujirudia video kuona 43 00:02:03,070 --> 00:02:07,770 hasa jinsi uchawi nyuma ya hii mchakato kujirudia unafanyika. 44 00:02:07,770 --> 00:02:09,870 Hivyo hii ni faili yetu yote, sawa? 45 00:02:09,870 --> 00:02:14,000 Sisi inavyoelezwa mbili functions-- kuu na ukweli. 46 00:02:14,000 --> 00:02:15,980 Na kama sisi kutarajia, C mpango wowote ni kwenda 47 00:02:15,980 --> 00:02:18,470 kuanza saa mstari wa kwanza wa kuu. 48 00:02:18,470 --> 00:02:21,660 >> Hivyo sisi kujenga mpya stack frame kwa kuu. 49 00:02:21,660 --> 00:02:23,320 Na ni kwenda kuanza mbio. 50 00:02:23,320 --> 00:02:25,270 Wito kuu printf. 51 00:02:25,270 --> 00:02:29,390 Na printf ni kwenda magazeti nje factorial ya 5. 52 00:02:29,390 --> 00:02:31,440 Naam, ni hajui nini factorial ya 5 ni, 53 00:02:31,440 --> 00:02:35,620 na hivyo wito huu tayari kutegemea mwingine wito kazi. 54 00:02:35,620 --> 00:02:37,270 Hivyo kuu ni kwenda kutulia pale pale. 55 00:02:37,270 --> 00:02:39,103 Mimi nina gonna kuondoka zake mshale haki pale, rangi 56 00:02:39,103 --> 00:02:41,360 ni alama sawa kama stack sura juu ya haki, 57 00:02:41,360 --> 00:02:47,720 zinaonyesha kwamba kuu ni kwenda kufungia hapa wakati factorial ya 5 inaitwa. 58 00:02:47,720 --> 00:02:49,300 >> Hivyo factorial ya 5 inaitwa. 59 00:02:49,300 --> 00:02:53,160 Na ni kwenda kuanza saa sana mwanzo wa kazi factorial. 60 00:02:53,160 --> 00:02:55,440 Ni anauliza swali mimi sawa na 1? 61 00:02:55,440 --> 00:02:56,810 Ni 5 sawa na 1? 62 00:02:56,810 --> 00:02:57,410 Naam, hapana. 63 00:02:57,410 --> 00:03:01,110 Hivyo ni kwenda kwenda chini kwa mwingine sehemu, kurudi n mara 64 00:03:01,110 --> 00:03:02,990 factorial ya n bala 1. 65 00:03:02,990 --> 00:03:03,490 Naam, OK. 66 00:03:03,490 --> 00:03:07,070 >> Hivyo sasa, factorial ya 5 ni kutegemea mwingine wito 67 00:03:07,070 --> 00:03:09,740 kwa factorial, kupita katika 4 kama parameter. 68 00:03:09,740 --> 00:03:14,210 Na hivyo factorial ya 5 sura, kwamba sura nyekundu, 69 00:03:14,210 --> 00:03:17,160 ni kwenda kufungia pale pale wakati huo mstari nimekuwa unahitajika 70 00:03:17,160 --> 00:03:21,914 na kusubiri kwa factorial ya 4 ya kumaliza nini mahitaji ya kufanya ili basi 71 00:03:21,914 --> 00:03:23,330 unaweza kuwa sura hai tena. 72 00:03:23,330 --> 00:03:26,890 >> Hivyo factorial ya kuanza saa 4 mwanzo wa factorial. 73 00:03:26,890 --> 00:03:28,556 Ni 4 sawa na 1? 74 00:03:28,556 --> 00:03:30,180 Hakuna, hivyo ni kwenda kufanya kitu kimoja. 75 00:03:30,180 --> 00:03:31,590 Ni kwenda kwenda chini kingine tawi. 76 00:03:31,590 --> 00:03:33,240 Ni kwenda kupata kwamba mstari wa kanuni. 77 00:03:33,240 --> 00:03:35,710 OK, mimi nina kwenda na kurudi mara nne. 78 00:03:35,710 --> 00:03:41,270 Loo, factorial ya 3-- hivyo factorial ya 4 inategemea factorial ya 3 kumaliza. 79 00:03:41,270 --> 00:03:43,055 >> Na hivyo mahitaji kuwaita factorial ya 3. 80 00:03:43,055 --> 00:03:45,180 Na kwamba gonna kwenda kwa njia ya mchakato huo tena. 81 00:03:45,180 --> 00:03:48,200 Ni kuanza kupitia, anapata hapa. 82 00:03:48,200 --> 00:03:50,980 Factorial ya 3 inategemea juu ya factorial ya 1. 83 00:03:50,980 --> 00:03:53,750 Hivyo factorial ya 2 kuanza, anapata hapa. 84 00:03:53,750 --> 00:03:56,310 Ni inategemea factorial ya 1. 85 00:03:56,310 --> 00:03:57,430 Factorial ya 1 kuanza. 86 00:03:57,430 --> 00:03:57,650 >> SAWA. 87 00:03:57,650 --> 00:03:59,775 Hivyo sasa, sisi ni kupata mahali fulani ya kuvutia, haki? 88 00:03:59,775 --> 00:04:02,190 Hivyo sasa, 1 ni sawa na 1. 89 00:04:02,190 --> 00:04:05,130 Na hivyo sisi kurudi 1. 90 00:04:05,130 --> 00:04:06,770 Katika hatua hii, sisi ni kurudi. 91 00:04:06,770 --> 00:04:07,880 Kazi inafanyika. 92 00:04:07,880 --> 00:04:11,140 Ni tabia is-- kuna kitu kingine kwa ajili yake kufanya, 93 00:04:11,140 --> 00:04:17,006 na hivyo stack frame kwa factorial ya 1 POP mbali. 94 00:04:17,006 --> 00:04:17,589 Ni kumaliza. 95 00:04:17,589 --> 00:04:19,480 Ni walirudi 1. 96 00:04:19,480 --> 00:04:23,370 Na sasa, factorial ya 2, ambayo Ilikuwa sura mara moja chini yake 97 00:04:23,370 --> 00:04:26,160 katika stack, inakuwa sura hai. 98 00:04:26,160 --> 00:04:29,030 >> Na inaweza kuchukua hasa ambapo kushoto mbali. 99 00:04:29,030 --> 00:04:32,240 Imekuwa ni kusubiri kwa factorial cha 1 mpaka kumaliza kazi yake. 100 00:04:32,240 --> 00:04:33,610 Kwa sasa kumaliza. 101 00:04:33,610 --> 00:04:35,510 Na hivyo hapa sisi ni. 102 00:04:35,510 --> 00:04:38,080 >> Factorial ya 1 akarudi thamani ya 1. 103 00:04:38,080 --> 00:04:42,430 Hivyo factorial ya 2 can kusema kurudi mara 2 kwa 1. 104 00:04:42,430 --> 00:04:43,680 Kazi yake kwa sasa unafanyika. 105 00:04:43,680 --> 00:04:49,110 Ni walirudi 2 kwa factorial ya 3, ambayo ilikuwa kusubiri kwa ajili yake. 106 00:04:49,110 --> 00:04:53,370 Factorial ya 3 ni sasa sura ya juu, sura hai katika stack. 107 00:04:53,370 --> 00:04:58,617 Na hivyo anasema, OK, vizuri, mimi nina kwenda kurudi 3 mara 2, ambayo ni 6. 108 00:04:58,617 --> 00:05:00,700 Na mimi nina kwenda kutoa kwamba thamani ya factorial nyuma 109 00:05:00,700 --> 00:05:03,430 ya 4, ambayo imekuwa kusubiri kwa ajili yangu. 110 00:05:03,430 --> 00:05:04,500 Nimemaliza. 111 00:05:04,500 --> 00:05:09,410 Factorial ya 3 POP mbali stack, na factorial ya 4 sasa ni sura hai. 112 00:05:09,410 --> 00:05:13,510 >> 4 inasema, OK, mimi nina kwenda na kurudi mara 4 factorial ya 3, ambayo ilikuwa sita. 113 00:05:13,510 --> 00:05:15,980 Hiyo ilikuwa ni ya thamani kwamba factorial ya 3 akarudi. 114 00:05:15,980 --> 00:05:19,010 Na hivyo mara 4 6 ni 24. 115 00:05:19,010 --> 00:05:20,990 Na mimi nina kwenda kupita kuwa nyuma ya factorial 116 00:05:20,990 --> 00:05:23,160 5, ambayo imekuwa kusubiri kwa ajili yangu. 117 00:05:23,160 --> 00:05:25,270 Factorial ya 5 sasa ni sura hai. 118 00:05:25,270 --> 00:05:30,700 Ni kwenda na kurudi mara 5 factorial ya 4-- 5 mara 24, au 120-- 119 00:05:30,700 --> 00:05:32,722 na kutoa thamani kwamba nyuma kuu, ambayo ina 120 00:05:32,722 --> 00:05:35,680 wamekuwa wakisubiri kwa uvumilivu sana kwa muda mrefu chini ya stack. 121 00:05:35,680 --> 00:05:36,640 >> Ni pale ulipoanzia. 122 00:05:36,640 --> 00:05:37,670 Ni alitoa wito huu. 123 00:05:37,670 --> 00:05:39,400 Muafaka kadhaa alichukua juu kwa juu. 124 00:05:39,400 --> 00:05:41,890 Sasa ni nyuma juu ya stack. 125 00:05:41,890 --> 00:05:43,450 Ni sura hai. 126 00:05:43,450 --> 00:05:47,810 Hivyo kuu got thamani 120 nyuma kutoka factorial ya 5. 127 00:05:47,810 --> 00:05:50,750 Imekuwa ni kusubiri kwa magazeti nje thamani hiyo. 128 00:05:50,750 --> 00:05:51,657 Na kisha ni kosa. 129 00:05:51,657 --> 00:05:53,240 Hakuna mistari zaidi ya kificho katika kuu. 130 00:05:53,240 --> 00:05:56,800 Hivyo sura kuu ya POP mbali stack, na sisi ni kosa. 131 00:05:56,800 --> 00:05:58,992 >> Na kwamba ni jinsi kujirudia kazi. 132 00:05:58,992 --> 00:06:00,200 Hiyo ni jinsi muafaka stack kazi. 133 00:06:00,200 --> 00:06:03,120 Wale wito kazi yaliyotokea hapo awali 134 00:06:03,120 --> 00:06:06,620 ni tu juu ya pause, kusubiri kwa ajili ya wito baadae 135 00:06:06,620 --> 00:06:12,050 kumaliza ili waweze kuwa hai sura na kumaliza wanahitaji nini cha kufanya. 136 00:06:12,050 --> 00:06:13,060 >> Mimi nina Doug Lloyd. 137 00:06:13,060 --> 00:06:14,880 Hii ni CS50. 138 00:06:14,880 --> 00:06:16,580