>> ZAMYLA: Ili kuelewa kujirudia, lazima
kwanza kuelewa recursion.
Kuwa na kujirudia katika kubuni programu njia kwamba una binafsi-rejea
ufafanuzi.
Kujirudia miundo data, kwa mfano, ni miundo data kwamba
pamoja na wao wenyewe katika ufafanuzi yao.
Lakini leo, sisi ni kwenda kuzingatia juu ya kazi ya kujirudia.
>> Kumbuka kwamba kazi kuchukua pembejeo, hoja, na kurudi thamani kama zao
pato kuwakilishwa na mchoro huu hapa.
Tutaweza kufikiria sanduku kama mwili wa kazi, zenye seti ya
maelekezo ya kwamba kutafsiri pembejeo na kutoa pato.
Kuchukua kuangalia kwa karibu ndani ya mwili wa kazi inaweza kufunua wito kwa
majukumu mengine kama vizuri.
Kuchukua kazi hii rahisi, foo, kwamba inachukua kamba moja kama mchango na
prints wangapi barua kamba ambayo ina.
kazi strlen, kwa kamba urefu, inaitwa, ambaye pato ni
inahitajika kwa ajili ya wito wa printf.
>> Sasa, nini hufanya kazi ya kujirudia maalum ni kwamba wito yenyewe.
Tunaweza kuwakilisha kujirudia hii wito kwa hii machungwa arrow
wanaoendesha nyuma yenyewe.
Lakini utekelezaji yenyewe tena mapenzi tu kufanya wito mwingine kujirudia, na
mwingine na mwingine.
Lakini kazi ya kujirudia hawezi kuwa kubwa.
Wanapaswa mwisho kwa kiasi fulani, au yako mpango wa kukimbia milele.
>> Kwa hiyo, tunahitaji kutafuta njia ya kuvunja nje ya simu ya kujirudia.
Sisi wito huu kesi ya msingi.
Wakati hali kesi ya msingi ni alikutana, kazi anarudi bila kufanya
mwingine wito kujirudia.
Kuchukua kazi hii, hi, utupu kazi kwamba inachukua int n kama pembejeo.
kesi ya msingi anakuja kwanza.
Kama n ni chini ya sifuri, magazeti bye na kurudi kwa ajili ya kesi nyingine zote,
kazi magazeti hi na kutekeleza wito kujirudia.
Mwingine wito kwa kazi hi na decremented pembejeo thamani.
>> Sasa, hata kama sisi magazeti hi, kazi si kusitisha mpaka sisi
kurudi kurudi aina yake, katika hii utupu kesi.
Hivyo kwa kila n kingine chochote zaidi ya kesi ya msingi, hii hi kazi atarudi hi
ya n minus 1.
Tangu kazi hii ni batili ingawa, sisi si wazi aina ya kurudi hapa.
Tutaweza tu kutekeleza kazi.
Hivyo wito hi (3) magazeti hi na kutekeleza hi (2) ambayo inatimiza hi (1) moja
ambayo inatimiza hi (0), ambapo hali kesi ya msingi ni alikutana.
Hivyo hi (0) Prints bye na kurudi.
>> OK.
Hivyo sasa kwamba sisi kuelewa misingi ya kazi ya kujirudia, kwamba wanahitaji
kesi angalau moja ya msingi ikiwa ni pamoja na wito kujirudia, basi hoja juu ya
maana zaidi mfano.
Moja ambayo haina kurudi tu utupu bila kujali.
>> Hebu tuangalie factorial operesheni kutumika kawaida katika
uwezekano mahesabu.
Factorial ya n ni bidhaa ya kila integer chanya chini ya
na sawa na n.
Hivyo factorial tano ni mara 5 mara 4 Mara 3 2 mara 1 kwa kutoa 120.
Nne factorial ni mara 4 mara 3 2 mara 1 kwa kutoa 24.
Na utawala hiyo inatumika kwa integer yoyote mazuri.
>> Hivyo jinsi gani sisi kuandika kujirudia kazi kwamba mahesabu ya factorial
ya namba?
Naam, tutaweza haja ya kutambua wote kesi ya msingi na wito kujirudia.
wito kujirudia itakuwa sawa ajili ya matukio yote ila kwa msingi
kesi, ambayo ina maana kwamba sisi itabidi kupata mfano kwamba atatupa wetu
taka matokeo.
>> Kwa mfano huu, kuona jinsi 5 factorial inahusisha kuzidisha 4 na 3 na 2 na 1
Na kwamba kuzidisha sawa sana ni kupatikana hapa,
ufafanuzi wa 4 factorial.
Hivyo tunaona kwamba 5 factorial ni tu mara 5 4 factorial.
Sasa haina muundo huu kuomba 4 Factorial vile vile?
Ndiyo.
Tunaona kwamba 4 factorial ina kuzidisha mara 3 2 mara 1,
ufafanuzi huo sana kama 3 factorial.
Hivyo 4 factorial ni sawa na 4 mara 3 factorial, na kadhalika na kadhalika wetu
mfano vijiti mpaka 1 factorial, ambayo kwa ufafanuzi ni sawa na 1.
>> Hakuna mengine chanya integers wa kushoto.
Hivyo tuna mfano kwa wito wetu kujirudia.
n factorial ni sawa na mara n factorial ya n minus 1.
Na kesi yetu ya msingi?
Kwamba itabidi kuwa na tafsiri yetu ya 1 factorial.
>> Hivyo sasa tunaweza kuendelea na kuandika kanuni kwa ajili ya kazi.
Kwa kesi ya msingi, tutaweza kuwa hali n sawa na usawa 1, ambapo
tutaweza kurudi 1.
Kisha kuhamia kwenye wito kujirudia, sisi itabidi kurudi mara n
factorial ya n minus 1.
>> Sasa hebu mtihani yetu hii.
Hebu jaribu factorial 4.
Kwa kazi yetu ni sawa kwa mara 4 factorial (3).
Factorial (3) ni sawa na Mara 3 factorial (2).
Factorial (2) ni sawa na mara 2 factorial (1), ambayo anarudi 1.
Factorial (2) sasa anarudi 2 mara 1, 2.
Factorial (3) sasa wanaweza kurudi Mara 3 2, 6.
Na hatimaye, factorial (4) anarudi 4 mara 6, 24.
>> Kama wewe ni kukutana na shida pamoja na simu ya kujirudia, kujifanya kuwa
kazi kazi tayari.
Nini maana na hii ni kwamba ni lazima imani wito wako kujirudia kurudi
maadili ya haki.
Kwa mfano, kama mimi kujua kwamba factorial (5) sawa na mara 5
factorial (4), mimi nina kwenda kuamini kwamba factorial (4) atanipa 24.
Fikiria kama variable, kama wewe mapenzi, kama ikiwa tayari inavyoelezwa
factorial (4).
Hivyo kwa factorial yoyote (n), ni bidhaa ya n na
factorial uliopita.
Na factorial hii ya awali ni kupatikana kwa kupiga
factorial ya n minus 1.
>> Sasa, kuona kama unaweza kutekeleza kujirudia kazi mwenyewe.
Ujazo wa juu terminal yako, au run.cs50.net, na kuandika kazi Jumla
kwamba inachukua integer n na anarudi Jumla ya yote mfululizo chanya
integers kutoka n 1.
Nimeandika nje kiasi ya baadhi ya maadili kukusaidia yetu.
Kwanza, kufikiri kesi ya msingi hali hiyo.
Basi, kuangalia Jumla (5).
Je, unaweza kueleza kuwa katika suala Jumla ya mwingine?
Sasa, nini kuhusu Jumla (4)?
Jinsi gani unaweza kueleza Jumla (4) katika suala la Jumla mwingine?
>> Mara baada ya kuwa na kiasi (5) na jumla (4) walionyesha katika suala la kiasi mengine, tazama
kama unaweza kutambua mfano kwa Jumla (n).
Kama siyo, kujaribu chache idadi nyingine na kueleza kiasi yao katika
suala la idadi mwingine.
Kwa kutambua chati kwa discrete idadi, wewe ni vizuri njia yako ya
kutambua mfano kwa n yoyote.
>> Recursion kweli zana yenye nguvu, hivyo bila shaka ni si mdogo
kazi hisabati.
Recursion inaweza kutumika kwa ufanisi sana wakati wa kushughulika na miti kwa mfano.
Angalia short juu ya miti kwa ajili ya mapitio ya kina zaidi, lakini kwa sasa
kukumbuka kwamba binary miti search, katika hasa, ni kufanywa juu ya nodes, kila
na thamani na kuyatumia node mbili.
Kwa kawaida, hii ni kuwakilishwa na mzazi node kuwa moja line akizungumzia
upande wa kushoto mtoto node na moja kwa haki ya mtoto nodi.
muundo wa search binary mti imejikita vizuri
ya kutafuta kujirudia.
wito kujirudia ama hupita katika upande wa kushoto au node haki, lakini zaidi
ya kwamba katika mti mfupi.
>> Sema unataka kufanya operesheni juu ya kila nodi moja katika mti binary.
Jinsi gani kwenda kuhusu hilo?
Naam, unaweza kuandika kujirudia kazi ambayo hufanya kazi
juu ya mzazi node na hufanya kujirudia kuwaita kazi moja,
kupita katika upande wa kushoto na haki ya mtoto nodes.
Kwa mfano, kazi hii, foo, kwamba mabadiliko thamani ya node aliyopewa na
yote ya watoto wake kwa 1.
kesi ya msingi ya sababu null node kazi kurudi, kuonyesha
kwamba kuna nodes yoyote kushoto kwa kuwa ndogo ya mti.
>> Hebu kutembea kwa njia hiyo.
mzazi kwanza ni 13.
Sisi mabadiliko ya thamani ya 1, na kisha kuwaita kazi yetu upande wa kushoto kama vizuri
kama ni haki.
kazi, foo, ni wito wa kushoto ndogo ya mti wa kwanza, hivyo node kushoto
itakuwa reassigned 1 na foo mapenzi kuitwa juu ya watoto node ya,
kwanza kushoto na kisha haki, na kadhalika na kadhalika.
Na kuwaambia kwamba matawi hawana watoto zaidi ili mchakato huo
itaendelea kwa watoto haki mpaka nodes mti mzima ni
reassigned 1.
>> Kama unaweza kuona, wewe si mdogo wito wa kujirudia moja tu.
Tu kama wengi kama kupata kazi kufanyika.
Nini kama alikuwa na mti ambapo kila node na watoto watatu,
Kushoto, katikati, na haki?
Jinsi gani unaweza hariri foo?
Naam, rahisi.
Tu kuongeza mwingine wito kujirudia na kupita katika pointer node katikati.
>> Recursion ni wenye nguvu sana na si kwa kutaja kifahari, lakini inaweza kuwa
vigumu dhana kwa mara ya kwanza, hivyo kuwa na mvumilivu na kuchukua muda wako.
Kuanza na kesi ya msingi.
Ni kawaida rahisi kutambua, na kisha unaweza kufanya kazi
nyuma kutoka huko.
Unajua unahitaji kufikia yako msingi kesi, hivyo nguvu kwamba
kukupa mwanga chache.
Jaribu kueleza kesi moja maalum katika suala la kesi nyingine, au katika ndogo ya seti.
>> Shukrani kwa ajili ya kuangalia hii fupi.
Kwa uchache sana, sasa unaweza kuelewa utani kama hii.
Jina langu ni Zamyla, na hii ni cs50.
>> Kuchukua kazi hii, hi, a utupu kazi ambayo inachukua
int, n, kama pembejeo.
kesi ya msingi anakuja kwanza.
Kama n ni, magazeti chini ya 0 "Bye" na kurudi.