DOUG Lloyd: Nëse e keni parë video mbi recursion,
i gjithë procesi mund të ketë dukej pak magjike.
Si punon?
Si mund funksionet e dinë se ata duhet të presë dhe të presin për një tjetër vlerë
për t'u kthyer nga një funksion të ndryshëm të thirrur në mënyrë që të merrni rezultatin që duam?
>> E pra, arsyeja punon kjo është për shkak se për diçka të njohur si thirrjes rafte.
Kur ju telefononi një funksioneve, Sistemi i vë mënjanë hapësirë ​​në memorie
për atë funksion për të bërë punën e saj.
Dhe ne i quajmë këto chunks e kujtesës që janë duke u vendosur mënjanë për çdo funksion
thërrasë një kornizë rafte apo një kornizë funksion.
Dhe si ju mund të presin, Këto korniza rafte
jetojnë në pjesën rafte e kujtesës.
>> Më shumë se një funksion kornizë rafte mund të ekzistojë në kujtesë në një kohë të dhënë.
Nëse kryesore quan një lëvizje funksion, dhe veprim quan drejtim,
Të tre funksionet ketë korniza të hapura.
Por jo të gjithë kanë korniza aktive.
Këto korniza janë të rregulluar në një pirg.
Dhe korniza nga quajtur më të fundit
funksion është gjithmonë në majë të pirg.
Dhe kjo është gjithmonë kornizë aktiv.
Ka vetëm me të vërtetë ndonjëherë një funksion që është aktiv në një kohë.
Kjo është një në krye të rafte.
>> Kur një funksion thërret një tjetër funksion, ai lloj i shtyn pauzë.
Kjo lloj është në pritje, në pritje.
Dhe një tjetër kornizë rafte është shtyrë mbi rafte në krye të saj.
Dhe kjo bëhet kornizë aktiv.
Dhe kornizë menjëherë më poshtë ajo duhet të presë
deri sa ajo është përsëri kornizë aktiv para se të mund të rifillojë punën e saj.
Kur një funksion është i plotë dhe kjo është bërë,
kornizë saj është popped off rafte.
Kjo është terminologjia.
Dhe kornizë menjëherë poshtë tij, si unë vetëm i tha,
bëhet kornizë e re aktive.
>> Dhe në qoftë se ai e quan një funksion tjetër, ajo do të ndalemi përsëri.
Kornizë rafte se funksioni i ri do të shtyhet në pjesën e sipërme të pirg.
Ajo do të bëjë punën e saj.
Ajo mund të pop përsëri jashtë.
Dhe funksioni tjetër më poshtë ai mund të rifillojë përsëri.
>> Pra, le të kalojnë nëpër këtë përsëri, duke kërkuar në idenë e funksionit faktorial
ne përkufizuar në Recursion video për të parë
saktësisht se si magji pas kësaj Procesi rekursive është duke u zhvilluar.
Pra, kjo është skedari ynë e tërë, e drejtë?
Ne përcaktuar dy functions-- kryesor dhe fakt.
Dhe si ne mund të presim, ndonjë program C po ndodh
të fillojë në rreshtin e parë të kryesore.
>> Pra, ne të krijojë një kornizë të re rafte për kryesor.
Dhe ajo do të fillojë running.
Thirrjet kryesore printf.
Dhe printf do të shtypura nga faktorial prej 5.
E pra, kjo nuk e di çfarë faktorial i 5 është,
dhe kështu që kjo thirrje është tashmë në varësi të një tjetër telefonatë funksion.
Pra, kryesor do të pauzë të drejtë atje.
Unë jam gonna të lënë të saj shigjetë e drejtë atje, ngjyra
ajo të njëjtën ngjyrë si rafte kornizë në të djathtë,
për të treguar se kryesore do të ngrijë këtu ndërsa faktorial i 5 është quajtur.
>> Pra faktorial i 5 është quajtur.
Dhe ajo do të fillojë në shumë fillimi i funksionit faktorial.
Ai shtron pyetjen jam e barabartë me 1?
5 është e barabartë me 1?
E pra, nuk ka.
Kështu ajo do të zbresin në pjesë tjetër, kthimi n herë
faktorial i n minus 1.
E pra, në rregull.
>> Deri tani, faktorial i 5 është në varësi të një tjetër telefonatë
të faktorial, duke kaluar në 4 si parametër.
Dhe kështu faktorial i 5 kornizë, që kornizë të kuqe,
do të ngrijë të drejtë ka në këtë linjë e kam treguar
dhe të presin për faktoriale e 4 të përfunduar çfarë ajo ka nevojë për të bërë kështu që atëherë ajo
mund të bëhet kuadër aktive përsëri.
>> Pra faktorial i 4 fillon në fillimi i faktorial.
4 është e barabartë me 1?
Jo, kështu që ajo do të bëjë të njëjtën gjë.
Ajo do të shkojë poshtë tjetër degë.
Ajo do të marrë në këtë linjë të kodit.
OK, unë jam duke shkuar për të kthyer katër herë.
Oh, faktorial i 3-- kështu faktorial i 4 varet faktoriale e 3 përfunduar.
>> Dhe kështu që ajo ka nevojë për të thirrur faktoriale e 3.
Dhe kjo është gonna të shkojnë nëpër i njëjti proces përsëri.
Ajo fillon me, merr këtu.
Faktorial i 3 varet në faktorial prej 1.
Pra faktorial e 2 fillon, merr këtu.
Kjo varet nga faktoriale e 1.
Faktorial e 1 fillon.
>> NE RREGULL.
Deri tani, ne jemi duke marrë diku interesant, e drejtë?
Kështu, 1 eshte e barabarte me 1.
Dhe kështu kthehemi 1.
Në këtë pikë, ne jemi të kthyer.
Është bërë funksioni.
Është sjellje is-- ka asgjë tjetër për atë për të bërë,
dhe kështu kornizë rafte për faktorial i 1 pops off.
Është përfunduar.
Ajo u kthye 1.
Dhe tani, faktorial i 2, i cili ishte korniza menjëherë poshtë saj
në rafte, bëhet kornizë aktiv.
>> Dhe kjo mund të marr pikërisht aty ku u ndërpre.
Ajo është duke pritur për një faktorial nga 1 për të përfunduar punën e saj.
Ajo ka mbaruar tani.
Dhe kështu që këtu ne jemi.
>> Faktorial nga 1 kthyer një vlerë prej 1.
Pra faktorial i 2 mund të themi kthehen 2 herë 1.
Puna e saj është bërë tani.
Është kthyer në 2 faktorial e 3, i cili ishte duke pritur për të.
Faktorial i 3 tani është kornizë të lartë, korniza aktive në rafte.
Dhe kështu ai thotë, OK, mirë, unë jam duke shkuar për t'u kthyer 3 herë 2, e cila është 6.
Dhe unë jam duke shkuar për të dhënë atë vlerësojnë përsëri në faktorial
i 4, i cili ka qenë duke pritur për mua.
Mbarova.
Faktorial i 3 pops off rafte, dhe faktorial i 4 është tani kornizë aktiv.
>> 4 thotë, OK, unë jam duke shkuar për të kthyer 4 herë faktorial i 3, e cila ishte gjashtë.
Kjo ishte me vlerë që faktorial i 3 kthye.
Dhe kështu 4 herë 6 është 24.
Dhe unë jam duke shkuar për të kaluar që përsëri të faktorial
e 5, e cila është duke pritur për mua.
Faktorial i 5 është tani kornizë aktiv.
Ajo do të kthehen 5 herë faktorial i 4-- 5 herë 24, ose 120--
dhe të japë këtë vlerë Mbrapsht në kryesore, e cila ka
pritur shumë durim për një kohë të gjatë në fund të rafte.
>> Kjo është ajo ku ajo filloi.
Ajo e bëri këtë thirrje.
Disa korniza mori në krye.
Ajo është tani përsëri në krye të rafte.
Kjo është kornizë aktive.
Pra kryesor mori vlerën 120 prapa nga faktorial i 5.
Ajo është në pritje për shtypura nga atë vlerë.
Dhe pastaj është bërë.
Nuk ka më shumë rreshta të kodit në kryesore.
Pra, kornizë kryesore të pops off rafte, dhe ne jemi duke bërë.
>> Dhe kjo është se si funksionon recursion.
Kjo është se si të punojnë korniza rafte.
Këto thirrje funksion që ka ndodhur më parë
janë vetëm në pauzë, duke pritur për thirrjet pasuese
të përfundojë në mënyrë që ata mund të bëhet aktive kornizë dhe të përfundojë se çfarë ata duhet të bëjnë.
>> Unë jam Doug Lloyd.
Kjo është CS50.