Ydych chi erioed wedi cael eich dal mewn cylch sy'n ymddangos yn ddiddiwedd lle mae problem yn parhau i ganghennu'n ddarnau llai?
Os felly, efallai eich bod wedi dod ar fyd hudolus dychwelyd. Er y gall ymddangos yn heriol deall, peidiwch â phoeni! Yn y swydd hon, byddwn yn mynd ar daith ddiddorol i ddysgu am fathau o recursions.
Felly bwclwch wrth i ni archwilio nifer o ddulliau ailadroddus. Paratowch i fynd i mewn i fyd rhyfeddol ail-ddigwyddiad ac arsylwi ar ei allu rhyfeddol i ddatrys materion cymhleth.
Beth yn union yw dychweliadau?
Mewn geiriau sylfaenol, mae recursion yn dechneg raglennu bwerus sy'n cynnwys swyddogaeth sy'n galw ei hun yn ystod gweithredu. Mae fel syllu i mewn i ddrych a gweld delwedd y tu mewn i ddelwedd, gan arwain at gylchred hunangyfeiriol.
Gallwn fynd i'r afael â materion mawr gan ddefnyddio dychwelyd drwy eu rhannu'n is-broblemau llai, mwy hylaw.
Mae'n debyg i roi jig-so at ei gilydd, lle mae un darn yn cysylltu â rhannau eraill i gynhyrchu darlun llawn. Mae dychweliad yn ein galluogi i ddatrys materion mewn modd cain ac effeithlon trwy ailadrodd yr un set o gyfarwyddiadau gyda mewnbynnau amrywiol.
1-Ailchweliad Uniongyrchol
Dychweliad uniongyrchol yw'r math mwyaf sylfaenol o ddychwelyd, lle mae swyddogaeth yn galw ei hun yn uniongyrchol. Mae'n golygu rhannu problem broblemus yn is-broblemau llai nes cyflawni achos sylfaenol, sy'n arwain at derfynu.
Mae'r swyddogaeth recursive yn galw ei hun gyda mewnbynnau amrywiol, gan alluogi gweithredu'r un set o gyfarwyddiadau i gael ei ailadrodd. Mae pob galwad yn adeiladu ar yr un blaenorol, gan nesáu'n raddol at yr achos sylfaenol sy'n achosi i'r ailadrodd ddod i ben.
Gadewch i ni wirio'r enghraifft hon.
def countdown(n):
if n <= 0:
return
print(n)
countdown(n - 1)
countdown(5)
Allbwn:
5
4
3
2
1
2-Recursion Anuniongyrchol
Mae dychwelyd anuniongyrchol yn ychwanegu tro diddorol i'r llwybr ailadroddus. Mewn cyferbyniad â dychweliad uniongyrchol, sy'n cynnwys swyddogaeth yn galw ei hun yn benodol, mae dychweliad anuniongyrchol yn cynnwys cadwyn o alwadau swyddogaeth.
Mae un swyddogaeth yn galw un arall, a all wedyn alw'r swyddogaeth wreiddiol neu unrhyw swyddogaeth arall sy'n mynd yn ôl i'r gwreiddiol o'r diwedd. Mae'r we ryng-gysylltiedig hon o alwadau ffwythiannau yn cynhyrchu dawns gyfareddol lle mae sawl swyddogaeth yn cydweithio i ddatrys problem.
enghraifft:
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)
Allbwn:
A: 3
B: 2
A: 1
3-Llinol Recursion
Ystyriwch daith i lawr llwybr syth, un cam ar y tro, nes i chi gyrraedd eich nod. Mae'r dechneg ddilyniannol hon wedi'i hymgorffori gan ailadroddiad llinol, lle mae swyddogaeth yn cyflawni un alwad ailadroddus ym mhob iteriad swyddogaeth.
Gyda phob galwad ailadroddus, mae'r broses ailadroddus yn symud yn agosach at achos sylfaenol trwy ostwng maint y mater. Mae'n mynd rhagddo mewn modd clir a llinol, gan ddatrys is-broblemau un ar y tro nes cyrraedd yr ateb terfynol.
enghraifft:
def factorial(n):
if n == 0:
return 1
return n * factorial(n - 1)
result = factorial(5)
print(result)
Allbwn:
120
Dychweliad 4-Coed
Pan fydd swyddogaeth yn brigo i nifer o alwadau ailadroddus, rydyn ni'n mynd i mewn i fyd dychwelyd coed. Mae swyddogaeth wrth ddychwelyd coed yn cynhyrchu llawer o alwadau ailadroddus, gyda phob un ohonynt yn datrys is-broblem ar wahân, yn union fel y mae canghennau coeden yn ei wneud.
Mae'r strwythur canghennog hwn yn caniatáu ymchwilio ar yr un pryd i sawl llwybr, gan rannu materion cymhleth yn gydrannau llai, cydberthynol i bob pwrpas.
enghraifft:
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n - 1) + fibonacci(n - 2)
result = fibonacci(6)
print(result)
Allbwn:
8
5-Nythiad Recursion
Mae dychweliad nythu yn ychwanegu graddfa gyffrous o gymhlethdod i'r bydysawd ailadroddus. Yn y math hwn o ailadrodd, mae swyddogaeth yn ymgorffori galwad ailadroddus fel dadl o fewn galwad ailadroddus arall.
Mae'r alwad recursive fewnol yn gweithredu ar werth sy'n dibynnu ar yr alwad ailadroddus allanol. Mae'r cymhlethdod yn tyfu gyda phob invocation nythu, gan arwain at batrwm diddorol o alwadau ailadroddus nythu.
enghraifft:
def nested_recursion(n):
if n > 100:
return n - 10
return nested_recursion(nested_recursion(n + 11))
result = nested_recursion(95)
print(result)
Canlyniad:
91
6-Tail Recursion
Techneg optimeiddio ar gyfer algorithmau ailadroddus yw cynffon recursion a all wella eu perfformiad. Mae'r alwad recursive yn ymddangos fel y weithred olaf o swyddogaeth gyda recursion gynffon, gwneud.
Gan nad oes unrhyw weithrediadau heb eu cwblhau yn dilyn yr alwad ailadroddus, gall y casglwr neu'r cyfieithydd symleiddio'r ailadrodd trwy roi naid syml yn ei le.
Mae'r dull optimeiddio hwn, a elwir yn optimeiddio galwadau cynffon, yn lleihau'r gofyniad i bob galwad ailadroddus gadw ffrâm pentwr, gan arwain at gyflymder gwell a defnydd cof is.
enghraifft:
def tail_factorial(n, result=1):
if n == 0:
return result
return tail_factorial(n - 1, result * n)
result = tail_factorial(5)
print(result)
Allanfa:
120
7-Di-gynffon Recursion
Mewn cyferbyniad â dychweliad cynffon, mae dychweliad di-gynffon yn cynnwys gweithgareddau ychwanegol a gyflawnir ar ôl yr alwad ailadroddus o fewn swyddogaeth. Cyn y gellir cyflawni unrhyw gamau pellach, rhaid i bob galwad ailadroddus gwblhau a dychwelyd.
O ganlyniad, nes bod yr achos sylfaenol wedi'i gyrraedd a'r dychweliad yn dod i ben, cedwir pentwr o weithrediadau sy'n weddill. Mae dychweliad di-gynffon yn aml yn defnyddio mwy o gof ac mae'n llai effeithlon na dychweliad cynffon, ond mae'n dal i fod yn offeryn defnyddiol ar gyfer mynd i'r afael ag amrywiaeth o faterion.
enghraifft:
def non_tail_sum(n):
if n == 0:
return 0
return n + non_tail_sum(n - 1)
result = non_tail_sum(5)
print(result)
Allbwn:
15
Llwytho i fyny
Mae Recursion yn gysyniad diddorol mewn rhaglennu. Mae'n ein galluogi i fynd i'r afael â phroblemau cymhleth mewn modd ailadroddus, hunangyfeiriol.
Mae'n cynnig dull unigryw o feddwl am broblemau a'u datrys, gan eu rhannu'n ddarnau llai, mwy hylaw. Wrth weithio gyda dychweliad, fodd bynnag, mae'n hanfodol defnyddio talu sylw i rai pwyntiau.
Dylech nodi achosion sylfaenol addas sy'n caniatáu i'r ailadrodd ddod i ben. Os nad ydynt yn bresennol, efallai y bydd y swyddogaeth yn parhau i alw ei hun am byth.
Yn ail, yn seiliedig ar y senario wrth law, gall dewis y math priodol o ailadrodd arwain at atebion mwy effeithlon a chain. Ceisiwch ddod o hyd i'r hyn sy'n gweithio orau ar gyfer y broblem yn y llaw. Wrth weithio gyda dyfnder dychwelyd enfawr, byddwch yn ymwybodol o beryglon posibl fel gorlif stac.
Gadael ymateb