Wake wabanjwa umjikelezo obonakala ungapheli lapho inkinga igcina ihlanganisa izingcezu ezincane?
Uma kunjalo, kungenzeka ukuthi usufikile emhlabeni ovusa amadlingozi wokuphindaphinda. Nakuba kungase kubonakale kuyinselele ukuqonda, ungakhathazeki! Kulokhu okuthunyelwe, sizohamba ohambweni olujabulisayo lokufunda ngezinhlobo zokuphindaphinda.
Ngakho-ke bopha njengoba sihlola izindlela eziningi eziphindaphindayo. Lungiselela ukungena endaweni ethokozisayo yokuphindaphinda futhi ubone ikhono layo elimangalisayo lokuxazulula izinkinga eziyinkimbinkimbi.
Ayini Ngokuqondile Ama-Recursions?
Ngamagama ayisisekelo, i-recursion iyindlela enamandla yokuhlela ehlanganisa umsebenzi ozibizayo ngokwawo phakathi nokusebenza. Kufana nokugqolozela esibukweni bese ubona isithombe esingaphakathi kwesithombe, okuholela kumjikelezo wokuzibheka wena.
Singabhekana nezinkinga ezinkulu sisebenzisa ukuphindaphinda ngokuzihlukanisa zibe yizinkinga ezincane, ezilawulekayo.
Kufana nokuhlanganisa i-jigsaw, lapho ucezu olulodwa luxhuma kwezinye izingxenye ukuze lukhiqize isithombe esigcwele. I-Recursion isivumela ukuthi sixazulule izinkinga ngendlela ekahle nephumelelayo ngokuphinda isethi efanayo yemiyalelo ngokufaka okuhlukahlukene.
1-Ukuphindaphinda okuqondile
Ukuphindaphinda okuqondile kuwuhlobo oluyisisekelo kakhulu lokuphindaphinda, lapho umsebenzi uzibiza khona ngokuqondile. Kubandakanya ukuhlukanisa inkinga eyinkinga ibe yizinkinga ezincane kuze kube yilapho kufinyelelwa icala eliyisisekelo, okuholela ekunqanyulweni.
Umsebenzi wokuphinda uzibize ngokufaka okuhlukahlukene, okuvumela ukwenziwa kwesethi efanayo yemiyalelo ukuthi kuphindwe. Isicelo ngasinye sakhela kowangaphambili, ngokuqhubekayo sisondela kukesi lesisekelo elibangela ukuphela kwe-recursion.
Ake sihlole lesi sibonelo.
def countdown(n):
if n <= 0:
return
print(n)
countdown(n - 1)
countdown(5)
okukhipha:
5
4
3
2
1
2-Ukuphindaphinda okungaqondile
I-recursion engaqondile yengeza i-twist ethakazelisayo endleleni ephindaphindayo. Ngokuphambene nokuphindaphinda okuqondile, okubandakanya umsebenzi ozibiza wona ngokusobala, ukuphindaphinda okungaqondile kuhlanganisa uchungechunge lwezingcingo zokusebenza.
Enye i-function ibiza enye, engabiza umsebenzi wokuqala noma yimuphi omunye umsebenzi ogcina ubuyela kowokuqala. Le webhu exhumene yamakholi wokusebenza ikhiqiza umdanso othokozisayo lapho imisebenzi embalwa isebenzisana ukuze kulungiswe inkinga.
Isibonelo:
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)
okukhipha:
A: 3
B: 2
A: 1
3-Linear Recursion
Cabangela uhambo olwehla ngomzila oqondile, isinyathelo esisodwa ngesikhathi, uze ufike kumgomo wakho. Le ndlela yokulandelana ihlanganiswe ukuphindaphinda komugqa, lapho umsebenzi wenza ikholi eyodwa ephindaphindayo ekuphindaphindweni ngakunye komsebenzi.
Ngekholi ngayinye ephindaphindayo, inqubo yokuphindaphinda isondela ku-base case ngokwehlisa usayizi wenkinga. Iqhubeka ngendlela ecacile nelandelanayo, ixazulula izinkinga ezincane ngesikhathi kuze kufinyelelwe impendulo yokugcina.
Isibonelo:
def factorial(n):
if n == 0:
return 1
return n * factorial(n - 1)
result = factorial(5)
print(result)
okukhipha:
120
4-Isihlahla Ukuphindaphinda
Uma umsebenzi ushintsha izingcingo ezimbalwa eziphindaphindayo, singena emhlabeni wokuphindaphinda kwesihlahla. Umsebenzi wokuphindaphinda kwesihlahla udala izingcingo eziningi eziphindaphindayo, ngayinye yazo exazulula inkinga encane ehlukile, njengoba kwenza amagatsha esihlahla.
Lesi sakhiwo segatsha sivumela ukuphenywa kanyekanye kwemizila eminingana, ukuhlephula ngokuphumelelayo izinkinga eziyinkimbinkimbi zibe izingxenye ezincane, ezihlobene.
Isibonelo:
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n - 1) + fibonacci(n - 2)
result = fibonacci(6)
print(result)
okukhipha:
8
5-Nested Recursion
I-Nested recursion yengeza izinga elijabulisayo lobunkimbinkimbi kumkhathi ophindaphindayo. Kulolu hlobo lokuphindaphinda, umsebenzi uhlanganisa ikholi ephindaphindayo njengempikiswano engaphakathi kolunye ucingo oluphindaphindayo.
Ucingo oluphindaphindayo lwangaphakathi lusebenza kunani elincike ocingweni oluphindaphindayo lwangaphandle. Ubunkimbinkimbi bukhula ngokunxusa ngakunye okufakwe esidlekeni, kufinyelele umvuthwandaba ngephethini ethakazelisayo yezingcingo eziphindaphindayo ezifakwe esidlekeni.
Isibonelo:
def nested_recursion(n):
if n > 100:
return n - 10
return nested_recursion(nested_recursion(n + 11))
result = nested_recursion(95)
print(result)
Umphumela:
91
6-Umsila Recursion
I-Tail recursion iyindlela yokuthuthukisa yama-algorithms aphindaphindayo angathuthukisa ukusebenza kwawo. Ucingo oluphindaphindayo luvela njengesenzo sokugcina somsebenzi onokuphindaphinda komsila, ukwenza.
Ngenxa yokuthi ayikho imisebenzi esele elandela ikholi ephindaphindwayo, umhlanganisi noma umhumushi angenza kube lula ukuphindaphinda ngokukumiselela ngokugxuma okulula.
Le ndlela yokuthuthukisa, eyaziwa ngokuthi i-tail call optimization, inciphisa imfuneko yocingo ngalunye oluphindaphindayo ukuze kugcinwe uzimele wesitaki, okuholela ekuthuthukisweni kwesivinini nokusetshenziswa kwememori okuphansi.
Isibonelo:
def tail_factorial(n, result=1):
if n == 0:
return result
return tail_factorial(n - 1, result * n)
result = tail_factorial(5)
print(result)
Outout:
120
7-Non-Tail Recursion
Ngokuphambene nokuphindaphinda komsila, ukuphindaphinda okungewona umsila kuhilela imisebenzi eyengeziwe eyenziwa ngemva kwekholi ephindaphindayo ngaphakathi komsebenzi. Ngaphambi kokuthi kwenziwe ezinye izenzo, ucingo ngalunye oluphindaphindwayo kufanele luqede futhi lubuye.
Njengomphumela, kuze kube yilapho icala eliyisisekelo lifinyelelwa futhi ukuphinda kuphele, inqwaba yemisebenzi esele iyagcinwa. I-non-tail recursion ivamise ukusebenzisa inkumbulo eningi futhi ayisebenzi kahle kune-recursion yomsila, kodwa kuseyithuluzi eliwusizo lokubhekana nezinkinga ezihlukahlukene.
Isibonelo:
def non_tail_sum(n):
if n == 0:
return 0
return n + non_tail_sum(n - 1)
result = non_tail_sum(5)
print(result)
okukhipha:
15
Qedani
I-Recursion umqondo othakazelisayo ohlelweni. Kusivumela ukuthi sibhekane nezinkinga eziyinkimbinkimbi ngendlela ephindaphindayo, yokuzibheka.
Inikeza indlela ehlukile yokucabanga nokuxazulula izinkinga, ihlukanise zibe izingxenye ezincane, ezilawulekayo. Lapho usebenza ngokuphindaphinda, noma kunjalo, kubalulekile ukusebenzisa ukunaka amaphuzu athile.
Kufanele ukhombe izimo eziyisisekelo ezifanele ezivumela ukuphinda kuphele. Uma zingekho, umsebenzi ungase uqhubeke uzibiza unaphakade.
Okwesibili, ngokusekelwe esimweni esiseduze, ukukhetha uhlobo olufanele lokuphindaphinda kungaholela ezisombululweni ezisebenza kahle nezinhle kakhulu. Zama ukuthola ukuthi yini esebenza kangcono enkingeni esesandleni. Lapho usebenza ngokujula okukhulu kokuphindaphinda, qaphela izingozi ezingaba khona njengokuchichima kwesitaki.
shiya impendulo