Doug Lloyd: Si ou te wè videyo a sou rkursyon,
pwosesis la tout antye ta ka gen te sanble yon ti jan majik.
Ki jan li travay?
Ki jan fonksyon yo konnen yo ke yo bezwen rete tann epi rete tann pou yon lòt valè
retounen soti nan yon fonksyon diferan rele yo nan lòd yo jwenn rezilta a nou vle?
>> Oke, rezon ki fè yo sa a ap travay se paske nan yon bagay ke yo rekonèt kòm chemine a apèl.
Lè ou rele yon fonksyon, nan sistèm kouche sou kote espas nan memwa
pou sa fonksyon fè travay li yo.
Apre sa, nou rele sa yo fragman nan memwa ki yo te mete sou kote pou chak fonksyon
rele yon ankadreman chemine oswa yon ankadreman fonksyon.
Ak jan ou ta ka atann, sa yo ankadreman chemine
ap viv sou pati nan pil nan memwa.
>> Plis pase yon fonksyon chemine ankadreman ka egziste nan memwa nan yon tan bay yo.
Si prensipal rele yon mouvman fonksyon, yo epi li deplase apèl direksyon,
tout twa fonksyon gen ankadreman louvri.
Men, yo pa tout gen ankadreman aktif.
Ankadreman sa yo yo ranje nan yon pil.
Apre sa, ankadreman an ki soti nan pi resamman rele
fonksyon se toujou sou tèt pil la.
E ke se toujou ankadreman an aktif.
Genyen sèlman vrèman tout tan yon sèl fonksyon sa a, se aktif nan yon moman.
Li nan youn nan sou tèt pil la.
>> Lè yon fonksyon rele yon lòt fonksyon, li sòt de près pran yon poz.
Li sòt de se sou kenbe, ap tann.
Apre sa, se yon lòt ankadreman chemine pouse sou chemine a sou tèt li.
Epi sa vin ankadreman an aktif.
Apre sa, ankadreman an imedyatman anba a li bezwen yo rete tann
jiskaske li se ankò ankadreman an aktif anvan li ka reprann travay li yo.
Lè yon fonksyon se konplè epi li fè,
Se ankadreman li yo déja nan chemine a.
Sa a tèminoloji la.
Apre sa, ankadreman an imedyatman anba a li, jan mwen jis te di,
vin nouvo ankadreman an aktif.
>> Men, si li rele yon lòt fonksyon, li pral pran yon poz ankò.
Chemine ankadreman ke nouvo fonksyon nan pral dwe pouse sou tèt la nan chemine a.
Li pral fè travay li yo.
Li ta ka pòp tounen an.
Ak fonksyon nan lòt anba a li ka reprann ankò.
>> Se konsa nou ale nan sa a ankò, kap nan lide a nan fonksyon an faktoryèl
ke nou defini nan la rkursyon videyo yo wè
egzakteman ki jan majik la dèyè sa a pwosesis repetitif ap pran plas.
Se konsa, sa a se tout antye dosye nou an, dwa?
Nou defini de functions-- prensipal ak reyalite.
E kòm nou ta ka atann, nenpòt pwogram C ki pral
yo kòmanse nan liy lan premye nan prensipal la.
>> Se konsa, nou kreye yon nouvo ankadreman chemine pou prensipal la.
Epi, se k ap pase yo kòmanse kouri.
Apèl Main printf.
Apre sa, printf ki pral enprime soti faktoryèl a 5.
Oke, li pa konnen sa faktoryèl nan 5 ki,
ak pou apèl sa a se deja depann sou yon lòt apèl fonksyon.
Se konsa, prensipal ki pral pran yon poz la a.
Mwen pral kite li yo arrow dwa gen, koulè
li koulè a ​​menm jan ak nan pile ankadreman sou bò dwat la,
yo endike ke prensipal ki pral friz isit la pandan y ap faktoryèl nan 5 yo rele.
>> Se konsa, faktoryèl nan 5 yo rele.
Epi, se k ap pase yo kòmanse nan trè an kòmanse nan fonksyon an faktoryèl.
Li mande kesyon an mwen egal a 1?
Se 5 egal a 1?
Oke, pa gen okenn.
Se konsa, li k ap pase yo desann nan lòt pati, retounen nan fwa n
faktoryèl nan n mwens 1.
Oke, OK.
>> Se konsa, kounye a, faktoryèl a 5 se depann sou yon lòt apèl
faktoryèl, pase nan 4 kòm paramèt nan.
Se konsa, faktoryèl a nan 5 ankadreman, ki ankadreman wouj,
ki pral friz dwa gen nan ki liy mwen te endike
epi tann pou faktoryèl nan 4 a fini ki sa li bezwen fè pou ke lè sa a li
ka vin ankadreman an aktif ankò.
>> Se konsa, faktoryèl nan 4 kòmanse nan nan konmansman an nan faktoryèl.
Se 4 egal a 1?
Non, se konsa li a pral fè menm bagay la.
Li k ap pase yo desann branch lan lòt bagay.
Li k ap pase pou li ale nan ki liy nan kòd.
OK, mwen pral retounen kat fwa.
Oh, faktoryèl a 3-- se konsa faktoryèl a 4 depann sou faktoryèl nan 3 fini.
>> Se konsa, li bezwen yo rele faktoryèl nan 3.
Epi sa a, pral ale nan menm pwosesis la ankò.
Li kòmanse nan, vin isit la.
Faktoryèl nan 3 depann sou faktoryèl nan 1.
Se konsa, faktoryèl nan 2 kòmanse, vin isit la.
Sa depann de faktoryèl nan 1.
Faktoryèl nan 1 kòmanse.
>> OK.
Se konsa, kounye a, nou ap vin yon kote ki enteresan, dwa?
Se konsa, kounye, 1 ki egal a 1.
Se konsa, nou retounen 1.
Nan pwen sa a, nou ap retounen.
Fonksyon an nan fè.
Li nan konpòtman is-- gen nan pa gen anyen lòt pou li fè,
ak pou ankadreman an pil pou faktoryèl nan 1 Pops la.
Li nan fini.
Li tounen 1.
Epi kounyeya, faktoryèl a 2, ki te ankadreman an imedyatman anba a li
nan chemine a, vin ankadreman an aktif.
>> Epi, se ka ranmase egzakteman ki kote li te kite la.
Li te ap tann pou yon faktoryèl de 1 a fin fè travay li yo.
Li gen kounye a fini.
Se konsa, isit la nou yo.
>> Faktoryèl nan 1 tounen yon valè de 1.
Se konsa, faktoryèl nan 2 ka di retounen 2 fwa 1.
Se travay li yo kounye a fè.
Li nan tounen 2 a faktoryèl nan 3, ki te ap tann pou li.
Faktoryèl nan 3 se kounye a ankadreman an tèt, ankadreman an aktif nan pil la.
Se konsa, li di, OK, byen, mwen pral retounen 3 fwa 2, ki se 6.
Apre sa, mwen pral bay ki valè tounen nan faktoryèl
nan 4, ki te te ap tann pou m '.
Mwen fini.
Faktoryèl nan 3 Pops koupe chemine a, ak faktoryèl nan 4 se kounye a ankadreman an aktif.
>> 4 di, OK, mwen pral retounen 4 fwa faktoryèl a nan 3, ki te sis.
Sa ki te nan valè ki faktoryèl nan 3 retounen.
Se konsa, 4 fwa 6 se 24.
Apre sa, mwen pral pase ki tounen nan faktoryèl
nan 5, ki te te ap tann pou m '.
Faktoryèl nan 5 se kounye a ankadreman an aktif.
Li nan ale nan retounen 5 fwa faktoryèl a 4-- 5 fwa 24, oswa 120--
epi bay ke valè tounen nan prensipal yo, ki te gen
te ap tann avèk pasyans pou yon trè bon bout tan nan pati anba a nan chemine a.
>> Li nan kote li te kòmanse.
Li te fè apèl sa a.
Plizyè ankadreman te pran plis pase nan tèt la.
Li se kounye a tounen sou tèt pil la.
Li nan ankadreman an aktif.
Se konsa, prensipal te resevwa valè a 120 tounen soti nan faktoryèl a 5.
Li te ap tann yo enprime soti ke valè.
Lè sa a, li fè.
Gen nan pa gen plis liy nan kòd nan prensipal la.
Se konsa, ankadreman prensipal la Pops koupe chemine a, epi nou ap fè.
>> Epi sa a, ki jan rkursyon fonksyone.
Sa a ki jan ankadreman chemine travay.
Moun sa yo ki apèl fonksyon sa ki te rive deja
yo se jis sou pran yon poz, rete ap tann pou apèl yo ki vin apre
a fini pou yo ka vin aktif nan ankadreman epi fini sa yo bezwen fè.
>> Mwen se Doug Lloyd.
Sa a se CS50.