DOUG LLOYD: Kama wameweza kuona video juu ya kujirudia,
mchakato mzima anaweza kuwa walionekana kidogo kichawi.
Jinsi gani kazi?
Jinsi gani kazi kujua kwamba wao haja ya kusubiri na kusubiri kwa thamani mwingine
kurudi kutoka kazi mbalimbali piga ili kupata matokeo tunataka?
>> Naam, sababu hii kazi ni kwa sababu ya kitu inayojulikana kama wito stack.
Wakati wewe piga kazi, mfumo unaweka kando nafasi katika kumbukumbu
kwa kazi ambayo kwa kufanya kazi yake.
Na tunatoa wito chunks ya kumbukumbu kwamba hawa ni kuwa zilizotengwa kwa ajili ya kila kazi
piga sura stack au sura kazi.
Na kama unaweza kutarajia, muafaka haya mkusanyiko
kuishi juu ya stack sehemu ya kumbukumbu.
>> Kazi zaidi ya moja stack frame unaweza kuwepo katika kumbukumbu kwa wakati huo.
Kama kuu wito kazi hoja, na hoja wito mwelekeo,
kazi zote tatu na muafaka wazi.
Lakini hawana wote wana muafaka kazi.
Muafaka haya ni kupangwa katika stack.
Na sura kutoka hivi karibuni wito
kazi ni daima juu ya stack.
Na kwamba daima ni sura hai.
Kuna tu kwa kweli milele moja kazi hiyo ni kazi kwa wakati.
Ni moja juu ya stack.
>> Wakati kazi wito mwingine kazi, ni aina ya mashinikizo ya kunyamaza.
Ni aina ya ni juu ya umiliki, kusubiri.
Na sura nyingine stack ni kusukuma kwenye stack juu yake.
Na kwamba inakuwa sura hai.
Na sura mara moja chini inahitaji kusubiri
mpaka ni tena sura hai kabla ya kuanza kazi yake.
Wakati kazi ni kamili na ni kosa,
sura yake ni popped mbali stack.
Hiyo ni istilahi.
Na sura mara moja chini yake, kama mimi tu alisema,
inakuwa mpya kazi sura.
>> Na kama ni wito kazi nyingine, itakuja kutulia tena.
Stack frame kwamba kazi mpya mapenzi kusukuma kwenye kilele cha stack.
Ni itabidi kufanya kazi yake.
Ni inaweza pop nyuma mbali.
Na kazi nyingine chini inaweza kuendelea tena.
>> Basi hebu kwenda kwa njia hii tena, kuangalia katika wazo la kazi factorial
kwamba sisi inavyoelezwa katika kujirudia video kuona
hasa jinsi uchawi nyuma ya hii mchakato kujirudia unafanyika.
Hivyo hii ni faili yetu yote, sawa?
Sisi inavyoelezwa mbili functions-- kuu na ukweli.
Na kama sisi kutarajia, C mpango wowote ni kwenda
kuanza saa mstari wa kwanza wa kuu.
>> Hivyo sisi kujenga mpya stack frame kwa kuu.
Na ni kwenda kuanza mbio.
Wito kuu printf.
Na printf ni kwenda magazeti nje factorial ya 5.
Naam, ni hajui nini factorial ya 5 ni,
na hivyo wito huu tayari kutegemea mwingine wito kazi.
Hivyo kuu ni kwenda kutulia pale pale.
Mimi nina gonna kuondoka zake mshale haki pale, rangi
ni alama sawa kama stack sura juu ya haki,
zinaonyesha kwamba kuu ni kwenda kufungia hapa wakati factorial ya 5 inaitwa.
>> Hivyo factorial ya 5 inaitwa.
Na ni kwenda kuanza saa sana mwanzo wa kazi factorial.
Ni anauliza swali mimi sawa na 1?
Ni 5 sawa na 1?
Naam, hapana.
Hivyo ni kwenda kwenda chini kwa mwingine sehemu, kurudi n mara
factorial ya n bala 1.
Naam, OK.
>> Hivyo sasa, factorial ya 5 ni kutegemea mwingine wito
kwa factorial, kupita katika 4 kama parameter.
Na hivyo factorial ya 5 sura, kwamba sura nyekundu,
ni kwenda kufungia pale pale wakati huo mstari nimekuwa unahitajika
na kusubiri kwa factorial ya 4 ya kumaliza nini mahitaji ya kufanya ili basi
unaweza kuwa sura hai tena.
>> Hivyo factorial ya kuanza saa 4 mwanzo wa factorial.
Ni 4 sawa na 1?
Hakuna, hivyo ni kwenda kufanya kitu kimoja.
Ni kwenda kwenda chini kingine tawi.
Ni kwenda kupata kwamba mstari wa kanuni.
OK, mimi nina kwenda na kurudi mara nne.
Loo, factorial ya 3-- hivyo factorial ya 4 inategemea factorial ya 3 kumaliza.
>> Na hivyo mahitaji kuwaita factorial ya 3.
Na kwamba gonna kwenda kwa njia ya mchakato huo tena.
Ni kuanza kupitia, anapata hapa.
Factorial ya 3 inategemea juu ya factorial ya 1.
Hivyo factorial ya 2 kuanza, anapata hapa.
Ni inategemea factorial ya 1.
Factorial ya 1 kuanza.
>> SAWA.
Hivyo sasa, sisi ni kupata mahali fulani ya kuvutia, haki?
Hivyo sasa, 1 ni sawa na 1.
Na hivyo sisi kurudi 1.
Katika hatua hii, sisi ni kurudi.
Kazi inafanyika.
Ni tabia is-- kuna kitu kingine kwa ajili yake kufanya,
na hivyo stack frame kwa factorial ya 1 POP mbali.
Ni kumaliza.
Ni walirudi 1.
Na sasa, factorial ya 2, ambayo Ilikuwa sura mara moja chini yake
katika stack, inakuwa sura hai.
>> Na inaweza kuchukua hasa ambapo kushoto mbali.
Imekuwa ni kusubiri kwa factorial cha 1 mpaka kumaliza kazi yake.
Kwa sasa kumaliza.
Na hivyo hapa sisi ni.
>> Factorial ya 1 akarudi thamani ya 1.
Hivyo factorial ya 2 can kusema kurudi mara 2 kwa 1.
Kazi yake kwa sasa unafanyika.
Ni walirudi 2 kwa factorial ya 3, ambayo ilikuwa kusubiri kwa ajili yake.
Factorial ya 3 ni sasa sura ya juu, sura hai katika stack.
Na hivyo anasema, OK, vizuri, mimi nina kwenda kurudi 3 mara 2, ambayo ni 6.
Na mimi nina kwenda kutoa kwamba thamani ya factorial nyuma
ya 4, ambayo imekuwa kusubiri kwa ajili yangu.
Nimemaliza.
Factorial ya 3 POP mbali stack, na factorial ya 4 sasa ni sura hai.
>> 4 inasema, OK, mimi nina kwenda na kurudi mara 4 factorial ya 3, ambayo ilikuwa sita.
Hiyo ilikuwa ni ya thamani kwamba factorial ya 3 akarudi.
Na hivyo mara 4 6 ni 24.
Na mimi nina kwenda kupita kuwa nyuma ya factorial
5, ambayo imekuwa kusubiri kwa ajili yangu.
Factorial ya 5 sasa ni sura hai.
Ni kwenda na kurudi mara 5 factorial ya 4-- 5 mara 24, au 120--
na kutoa thamani kwamba nyuma kuu, ambayo ina
wamekuwa wakisubiri kwa uvumilivu sana kwa muda mrefu chini ya stack.
>> Ni pale ulipoanzia.
Ni alitoa wito huu.
Muafaka kadhaa alichukua juu kwa juu.
Sasa ni nyuma juu ya stack.
Ni sura hai.
Hivyo kuu got thamani 120 nyuma kutoka factorial ya 5.
Imekuwa ni kusubiri kwa magazeti nje thamani hiyo.
Na kisha ni kosa.
Hakuna mistari zaidi ya kificho katika kuu.
Hivyo sura kuu ya POP mbali stack, na sisi ni kosa.
>> Na kwamba ni jinsi kujirudia kazi.
Hiyo ni jinsi muafaka stack kazi.
Wale wito kazi yaliyotokea hapo awali
ni tu juu ya pause, kusubiri kwa ajili ya wito baadae
kumaliza ili waweze kuwa hai sura na kumaliza wanahitaji nini cha kufanya.
>> Mimi nina Doug Lloyd.
Hii ni CS50.