An raibh tú gafa riamh i dtimthriall nach bhfuil deireadh leis, áit a mbíonn fadhb ag dul i méid i blúirí beaga?
Más amhlaidh, b'fhéidir gur tháinig tú ar shaol spreagúil na hathchúrsála. Cé go bhfeictear go bhfuil sé dúshlánach é a thuiscint, ná bí buartha! Sa phost seo, rachaidh muid ar thuras suimiúil chun foghlaim faoi chineálacha athchúrsála.
Mar sin búcla suas agus muid ag iniúchadh cur chuige athchúrsach iomadúla. Bí réidh le dul isteach i réimse fíorspéisiúil na hathchúrsála agus breathnaigh ar a cumas iontach i réiteach saincheisteanna casta.
Cad Go díreach atá Aischur?
I bhfocail bhunúsacha, is teicníocht chumhachtach ríomhchláraithe é an t-athchúrsáil a chuimsíonn feidhm a ghlaonn air féin le linn an fhorghníomhaithe. Tá sé cosúil le stánadh isteach i scáthán agus íomhá a fheiceáil taobh istigh d'íomhá, rud a fhágann timthriall féintagartha.
Is féidir linn dul i ngleic le saincheisteanna móra trí úsáid a bhaint as atarlú trí iad a roinnt i bhfo-fhadhbanna níos lú agus níos soláimhsithe.
Tá sé cosúil le míreanna mearaí a chur le chéile, áit a nascann píosa amháin le codanna eile chun pictiúr iomlán a tháirgeadh. Ligeann Atarlú dúinn saincheisteanna a réiteach ar bhealach galánta agus éifeachtach trí na treoracha céanna a athrá le hionchuir éagsúla.
1-Athchur Díreach
Is é atarlú díreach an cineál atarlaithe is bunúsaí, ina nglaonn feidhm go díreach. Is éard atá i gceist leis fadhb fhadhbach a roinnt i bhfo-fhadhbanna níos lú go dtí go mbaintear amach cás bonn, rud a fhágann go gcuirtear deireadh leis.
Glaonn an fheidhm athfhillteach í féin le hionchuir éagsúla, rud a fhágann gur féidir an tsraith treoracha céanna a dhéanamh arís. Tógann gach agairt ar an gceann a chuaigh roimhe, ag druidim go comhleanúnach leis an mbunchás a fhágann go dtiocfaidh deireadh leis an athuair.
Déanaimis an sampla seo a sheiceáil.
def countdown(n):
if n <= 0:
return
print(n)
countdown(n - 1)
countdown(5)
aschur:
5
4
3
2
1
2-Athchur Indíreach
Cuireann atarlú indíreach casadh suimiúil leis an gcosán athfhillteach. I gcodarsnacht leis an atarlú díreach, a bhaineann le feidhm a ghlaonn go sainráite uirthi féin, cuimsíonn atarlú indíreach slabhra de ghlaonna feidhme.
Glaonn feidhm amháin ar fheidhm eile, agus is féidir an fheidhm bhunaidh nó aon fheidhm eile a théann siar go dtí an bhunfheidhm a ghlaoch ar deireadh. Cruthaíonn an gréasán idirnasctha seo de ghlaonna feidhm damhsa spreagúil ina gcomhoibríonn roinnt feidhmeanna chun fadhb a réiteach.
Sampla:
def function_A(n):
if n > 0:
print("A:", n)
function_B(n - 1)
def function_B(n):
if n > 0:
print("B:", n)
function_A(n - 1)
function_A(3)
aschur:
A: 3
B: 2
A: 1
3-Athchúrsa Líneach
Smaoinigh ar thuras síos bealach díreach, céim amháin ag an am, go dtí go sroicheann tú do chuspóir. Tá an teicníocht sheicheamhach seo cuimsithe ag atarlú líneach, ina ndéanann feidhm glao athfhillteach amháin i ngach atriall feidhme.
Le gach glao athchúrsach, bogann an próiseas athfhillteach níos gaire do chás bonn tríd an méid eisiúna a ísliú. Leanann sé ar aghaidh ar bhealach soiléir líneach, ag réiteach fo-fhadhbanna ceann i ndiaidh a chéile go dtí go sroichtear an freagra deiridh.
Sampla:
def factorial(n):
if n == 0:
return 1
return n * factorial(n - 1)
result = factorial(5)
print(result)
aschur:
120
Aisghabháil 4-Crann
Nuair a bhíonn feidhm ag craobhscaoileadh i roinnt glaonna athchúrsacha, rachaimid isteach i saol athchúrsála crann. Gineann feidhm in atarlú crann go leor glaonna athfhillteacha, agus réitíonn gach ceann acu fo-fhadhb ar leith, díreach mar a dhéanann brainsí crann.
Ligeann an struchtúr brainseach seo d’iniúchadh comhuaineach a dhéanamh ar go leor bealaí, ag briseadh síos go héifeachtach saincheisteanna casta ina gcomhpháirteanna níos lú idirghaolmhara.
Sampla:
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n - 1) + fibonacci(n - 2)
result = fibonacci(6)
print(result)
aschur:
8
Atarlaithe 5-Neadaithe
Cuireann atarlú neadaithe méid spreagúil castachta leis an gcruinne athfhillteach. Sa chineál seo athfhillteach, ionchorpraíonn feidhm glao athfhillteach mar argóint laistigh de ghlao athfhillteach eile.
Feidhmíonn an glao athchúrsach inmheánach ar luach atá ag brath ar an nglao athchúrsach seachtrach. Fásann an chastacht le gach agairt neadaithe, ag críochnú le patrún spéisiúil de ghlaonna athfhillteacha neadaithe.
Sampla:
def nested_recursion(n):
if n > 100:
return n - 10
return nested_recursion(nested_recursion(n + 11))
result = nested_recursion(95)
print(result)
Toradh:
91
6-Tail Recursion
Teicníc optamaithe is ea atarlú eireaball le haghaidh halgartaim athchúrsacha ar féidir leo a bhfeidhmíocht a fheabhsú. Is cosúil gurb é an glao athchúrsach an gníomh deiridh d’fheidhm a bhfuil atarlú eireaball, ag déanamh.
Toisc nach bhfuil aon oibríochtaí fós le déanamh tar éis an ghlao athchúrsach, is féidir leis an tiomsaitheoir nó leis an ateangaire an t-athchúrsa a shimpliú trí léim shimplí a chur ina ionad.
Laghdaíonn an cur chuige leas iomlán a bhaint seo, ar a dtugtar leas iomlán a bhaint glaoch eireaball, an ceanglas do gach glao athfhillteach fráma cruachta a choinneáil, rud a fhágann go bhfuil luas feabhsaithe agus úsáid cuimhne níos ísle.
Sampla:
def tail_factorial(n, result=1):
if n == 0:
return result
return tail_factorial(n - 1, result * n)
result = tail_factorial(5)
print(result)
Amach:
120
7-Athchúrsáil Neamh-Eireaball
I gcodarsnacht le hathchúrsáil eireaball, bíonn gníomhaíochtaí breise i gceist le hathchúrsáil neamheireaball a dhéantar tar éis an ghlao athfhillteach laistigh d’fheidhm. Sula bhféadfar aon ghníomh eile a dhéanamh, ní mór gach glao athfhillteach a chomhlánú agus a sheoladh ar ais.
Mar thoradh air sin, go dtí go mbaintear amach an bunchás agus go gcríochnaítear an t-aischur, coinnítear stack oibríochtaí atá fós le déanamh. Is minic a úsáideann atarlú neamh-eireaball níos mó cuimhne agus níl sé chomh héifeachtach ná atarlú eireaball, ach tá sé fós ina uirlis chabhrach chun dul i ngleic le saincheisteanna éagsúla.
Sampla:
def non_tail_sum(n):
if n == 0:
return 0
return n + non_tail_sum(n - 1)
result = non_tail_sum(5)
print(result)
aschur:
15
Clóscríobh
Is coincheap suimiúil é an t-athchúrsáil sa ríomhchlárú. Ligeann sé dúinn dul i ngleic le fadhbanna casta ar bhealach athfhillteach, féintagartha.
Cuireann sé modh ar leith ar fáil chun fadhbanna a mhachnamh agus a réiteach, agus iad a bhriseadh síos ina smuillí níos lú agus níos soláimhsithe. Agus tú ag obair le hathchúrsaíocht, áfach, tá sé ríthábhachtach aird a thabhairt ar roinnt pointí.
Ba chóir duit bunchásanna oiriúnacha a aithint a fhágann gur féidir deireadh a chur leis an atarlú. Mura bhfuil siad i láthair, féadfaidh an fheidhm leanúint ar aghaidh ag glaoch uirthi féin go deo.
Ar an dara dul síos, bunaithe ar an gcás atá ar láimh, d'fhéadfadh réitigh níos éifeachtaí agus níos galánta a bheith mar thoradh ar roghnú an chineál aisfhillte chuí. Déan iarracht teacht ar cad a oibríonn is fearr don fhadhb sa lámh. Agus tú ag obair le doimhneacht aisfhillte ollmhór, bí ar an eolas faoi chontúirtí a d'fhéadfadh a bheith ann mar thar maoil cruachta.
Leave a Reply