Ngaba ukhe wabanjwa kumjikelo obonakala ngathi awunasiphelo apho ingxaki igcina i-branching ibe ngamaqhekeza amancinci?
Ukuba kunjalo, usenokuba uye wafika kwihlabathi elonwabisayo lokuphindaphinda. Nangona kusenokubonakala kulucelomngeni ukuqonda, ungakhathazeki! Kule posi, siza kuhamba kuhambo olunomdla lokufunda malunga neentlobo zokuphindaphinda.
Ke bopha amaqhosha njengoko sijonga iindlela ezininzi zokuphindaphinda. Lungiselela ukungena kwindawo enomdla yokuphindaphinda kwaye ubone amandla ayo amangalisayo ekusombululeni imiba entsonkothileyo.
Ziyintoni Kanye Kanye IiRecursions?
Ngamagama asisiseko, i-recursion yindlela enamandla yokucwangcisa ebandakanya umsebenzi ozibizayo ngexesha lophumezo. Kufana nokujonga esipilini uze ubone umfanekiso ongaphakathi emfanekisweni, okukhokelela kumjikelo wokuzibonakalisa.
Singakwazi ukujongana nemiba emikhulu sisebenzisa ukuphindaphinda ngokuzahlula phantsi kwiingxaki ezincinci ezilawulekayo.
Kuyafana nokudibanisa ijigsaw, apho isiqwenga esinye sidibana namanye amalungu ukuvelisa umfanekiso opheleleyo. Ukuphindaphinda kusivumela ukuba sisombulule imiba ngendlela entle nesebenzayo ngokuphinda iseti efanayo yemiyalelo ngamagalelo ahlukeneyo.
1-Ukuphindaphinda ngokuthe ngqo
Ukuphindaphinda ngokuthe ngqo lolona hlobo olusisiseko lokuphindaphinda, apho umsebenzi uzibiza ngokuthe ngqo. Ibandakanya ukwahlula ingxaki eyingxaki kwiingxaki ezincinci kude kube kuphunyeziwe imeko esisiseko, ekhokelela ekuphelisweni.
Umsebenzi wokuphinda uzibize ngamagalelo awohlukeneyo, okwenza uphumezo lweseti efanayo yemiyalelo ukuba iphindwe. Isibongozo ngasinye sakhela kweyangaphambili, ngokuqhubekayo isondela kwimeko esisiseko ebangela ukuba ukuphindaphinda kuphele.
Makhe sijonge lo mzekelo.
def countdown(n):
if n <= 0:
return
print(n)
countdown(n - 1)
countdown(5)
Isiphumo:
5
4
3
2
1
2-Ukuphindaphinda okungathanga ngqo
I-recursion engathanga ngqo yongeza i-twist enomdla kwindlela ephindaphindayo. Ngokuchaseneyo nophindaphindo oluthe ngqo, olubandakanya umsebenzi ozibiza ngokucacileyo, uphindaphindo olungathanga ngqo lubandakanya uthotho lweefowuni zokusebenza.
Omnye umsebenzi ubiza enye, enokuthi emva koko ibize umsebenzi wokuqala okanye nawuphi na omnye umsebenzi othi ekugqibeleni ubuyele kowokuqala. Le web idityanisiweyo yeefowuni zokusebenza ivelisa umdaniso ochulumancisayo apho imisebenzi emininzi isebenzisana ukulungisa ingxaki.
Umzekelo:
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)
Isiphumo:
A: 3
B: 2
A: 1
3-Uphindaphindo lomgca
Cinga ngohambo lokuhla ngendlela ethe tye, inyathelo elinye ngexesha, de ufikelele kwinjongo yakho. Le ndlela yolandelelwano iqulathwe luphindaphindo lomgca, apho umsebenzi wenza umnxeba ophindaphindayo omnye kuphindaphindo lomsebenzi ngamnye.
Ngomnxeba ngamnye ophindaphindiweyo, inkqubo yokuphindaphinda isondela kufutshane nesiseko ngokunciphisa ubungakanani bomcimbi. Iqhuba ngendlela ecacileyo nelandelelanayo, isombulula iingxaki enye ngexesha de kufikelelwe kwimpendulo yokugqibela.
Umzekelo:
def factorial(n):
if n == 0:
return 1
return n * factorial(n - 1)
result = factorial(5)
print(result)
Isiphumo:
120
4-Ukuphindaphinda kwemithi
Xa umsebenzi udibanisa iifowuni ezininzi eziphindaphindayo, singena kwihlabathi lokuphindaphinda kwemithi. Umsebenzi wokuphindaphinda umthi uvelisa iifowuni ezininzi eziphindaphindayo, nganye kuzo isombulula ingxaki eyahlukileyo, njengoko esenza amasebe omthi.
Olu lwakhiwo lwamasebe luvumela uphando ngaxeshanye lweendlela ezininzi, ngokufanelekileyo ukwahlula imiba entsonkothileyo ibe ngamacandelo amancinci, anxulumeneyo.
Umzekelo:
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n - 1) + fibonacci(n - 2)
result = fibonacci(6)
print(result)
Isiphumo:
8
5-Nested Recursion
I-Nested recursion yongeza iqondo elinomdla lokuntsonkotha kwindalo ephindaphindayo. Kolu hlobo lokuphinda-phinda, umsebenzi udibanisa umnxeba ophinda-phindayo njengengxoxo phakathi komnye umnxeba ophindaphindayo.
I-internal recursive call isebenza kwixabiso elixhomekeke kwi-recursive call yangaphandle. Ubunzima buyakhula ngesicelo ngasinye esifakwe kwindlwane, siphelela kwipateni enomdla yeefowuni eziphindaphindayo.
Umzekelo:
def nested_recursion(n):
if n > 100:
return n - 10
return nested_recursion(nested_recursion(n + 11))
result = nested_recursion(95)
print(result)
Isiphumo:
91
6-Umsila Recursion
I-recursion yomsila yindlela yokuphucula i-algorithms ephindaphindayo enokuphucula ukusebenza kwayo. Umnxeba ophindaphindiweyo uvela njengesenzo sokugqibela somsebenzi kunye nomsila wokuphindaphinda, ukwenza.
Ngenxa yokuba akukho misebenzi ibalaseleyo elandela umnxeba ophindaphindiweyo, umqambi okanye itoliki inokwenza lula ukuphindaphinda ngokuyibuyisela ngokutsiba okulula.
Le ndlela yokuphucula, eyaziwa ngokuba kukwenziwa kwefowuni yomsila, inciphisa imfuneko yomnxeba ngamnye ophindaphindayo ukugcina isakhelo sesitaki, esikhokelela kwisantya esongeziweyo kunye nokusetyenziswa kwememori esezantsi.
Umzekelo:
def tail_factorial(n, result=1):
if n == 0:
return result
return tail_factorial(n - 1, result * n)
result = tail_factorial(5)
print(result)
Ngaphandle:
120
I-7-Non-Tail Recursion
Ngokwahlukileyo kwi-recursion yomsila, i-non-tail recursion ibandakanya imisebenzi eyongezelelweyo eyenziwa emva kokufowuna okuphindaphindiweyo ngaphakathi komsebenzi. Phambi kokuba kwenziwe naziphi na izenzo ezingakumbi, umnxeba ophindaphindayo ngamnye kufuneka ugqibezele kwaye ubuye.
Ngenxa yoko, de kufike i-base case kwaye i-recursion iphela, i-stack yemisebenzi eseleyo iyagcinwa. I-recursion engekho-msila ihlala isebenzisa imemori eninzi kwaye ayisebenzi kakuhle kunomsila, kodwa isesisixhobo esiluncedo sokujongana nemiba eyahlukeneyo.
Umzekelo:
def non_tail_sum(n):
if n == 0:
return 0
return n + non_tail_sum(n - 1)
result = non_tail_sum(5)
print(result)
Isiphumo:
15
Songa
I-recursion yingcamango enomdla kwiprogram. Kusivumela ukuba sijongane neengxaki ezinzima ngendlela ephindaphindayo, ezibonakalisayo.
Inika indlela eyahlukileyo yokucinga kunye nokusombulula iingxaki, ukuzohlula zibe ngamaqhekeza amancinci, alawulekayo. Xa usebenza ngokuphindaphinda, nangona kunjalo, kubalulekile ukusebenzisa ingqalelo kwezinye iingongoma.
Kuya kufuneka uchonge iimeko ezifanelekileyo ezisisiseko ezivumela ukuphindaphinda ukuba kuphele. Ukuba azikho, umsebenzi unokuqhubeka uzibiza ngonaphakade.
Okwesibini, ngokusekwe kwimeko ekhoyo, ukukhetha uhlobo olufanelekileyo lokuphindaphinda kunokukhokelela kwizisombululo ezisebenza kakuhle nezihle. Zama ukufumana oko kusebenza kakuhle kwingxaki esesandleni. Xa usebenza ngobunzulu obukhulu obuphindaphindayo, lumkela ubungozi obunokubakho njengokuphuphuma kwemfumba.
Shiya iMpendulo