Qatt inqabad f'ċiklu li jidher li ma jintemmx fejn problema tibqa' tinfirex fi frammenti iżgħar?
Jekk iva, jista’ jkun li ġejt fuq id-dinja enthralling tar-rikorsjoni. Filwaqt li jista 'jidher li jkun ta' sfida biex tifhem, tinkwetax! F'din il-kariga, se mmorru fuq vjaġġ interessanti biex nitgħallmu dwar tipi ta' rikorsi.
Allura waħħal il-bokkla hekk kif nesploraw bosta approċċi rikorsivi. Ipprepara biex tidħol fl-isfera affaxxinanti tar-rikorsjoni u osserva l-abbiltà notevoli tagħha biex issolvi kwistjonijiet ikkumplikati.
X'inhuma Eżattament Rikorsjonijiet?
Fi kliem bażiku, ir-rikorsjoni hija teknika ta 'programmazzjoni qawwija li tinkludi funzjoni li ssejjaħ lilha nnifisha waqt l-eżekuzzjoni. Huwa bħal li tħares lejn mera u tara immaġni ġewwa immaġini, li jirriżulta f'ċiklu awtoreferenzjali.
Nistgħu nindirizzaw kwistjonijiet kbar billi nużaw ir-rikors billi naqsmuhom f'subproblemi iżgħar u aktar maniġġabbli.
Huwa simili għat-tqegħid flimkien ta 'jiggsaw, fejn biċċa waħda tgħaqqad ma' partijiet oħra biex tipproduċi stampa sħiħa. Ir-rikors jippermettilna nsolvu kwistjonijiet b'mod eleganti u effiċjenti billi nirrepetu l-istess sett ta 'struzzjonijiet b'diversi inputs.
1-Rikursjoni Diretta
Ir-rikorsjoni diretta hija l-aktar tip bażiku ta 'rikorsjoni, li fiha funzjoni ssejjaħ lilha nnifisha direttament. Dan jinvolvi li problema problematika tinqasam f'subproblemi iżgħar sakemm jintlaħaq każ bażi, li jwassal għat-terminazzjoni.
Il-funzjoni rikorsiva ssejjaħ lilha nnifisha b'diversi inputs, li tippermetti li l-eżekuzzjoni tal-istess sett ta 'struzzjonijiet tiġi ripetuta. Kull invokazzjoni tibni fuq dik ta 'qabel, progressivament toqrob lejn il-każ bażi li jikkawża tmiem ir-rikors.
Ejja niċċekkjaw dan l-eżempju.
def countdown(n):
if n <= 0:
return
print(n)
countdown(n - 1)
countdown(5)
Riżultat:
5
4
3
2
1
2-Rikorsjoni Indiretta
Ir-rikorsjoni indiretta żżid twist intriganti mal-mogħdija rikorsiva. B'kuntrast mar-rikorsjoni diretta, li tinvolvi funzjoni li ssejjaħ lilha nnifisha b'mod espliċitu, ir-rikorsjoni indiretta tinkludi katina ta' sejħiet ta' funzjoni.
Funzjoni waħda titlob oħra, li mbagħad tista 'ssejjaħ il-funzjoni oriġinali jew kwalunkwe funzjoni oħra li finalment tmur lura għall-oriġinal. Din il-web interkonnessa ta 'sejħiet ta' funzjoni tipproduċi żfin enthralling li fih diversi funzjonijiet jikkollaboraw biex jirranġaw problema.
Eżempju:
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)
Riżultat:
A: 3
B: 2
A: 1
3-Rikorsjoni Lineari
Ikkunsidra vjaġġ fuq rotta dritta, pass kull darba, sakemm tasal għall-għan tiegħek. Din it-teknika sekwenzjali hija inkorporata minn rikorsjoni lineari, li fiha funzjoni twettaq sejħa waħda rikorsiva f'kull iterazzjoni tal-funzjoni.
Ma' kull sejħa rikorsiv, il-proċess rikorsiv jersaq eqreb lejn każ bażi billi jnaqqas id-daqs tal-kwistjoni. Jipproċedi b'mod ċar u lineari, u jsolvi subproblemi wieħed wieħed sakemm tintlaħaq it-tweġiba aħħarija.
Eżempju:
def factorial(n):
if n == 0:
return 1
return n * factorial(n - 1)
result = factorial(5)
print(result)
Riżultat:
120
4-Rekursjoni tas-Siġar
Meta funzjoni tinfirex f'diversi sejħiet rikorsivi, nidħlu fid-dinja tar-rikorsi tas-siġar. Funzjoni fir-rikorżjoni tas-siġra tiġġenera ħafna sejħiet rikorsivi, li kull waħda minnhom issolvi subproblema separata, bħalma jagħmlu l-fergħat ta 'siġra.
Din l-istruttura tal-fergħat tippermetti l-investigazzjoni simultanja ta 'bosta rotot, li effettivament tkisser kwistjonijiet ikkumplikati f'komponenti iżgħar u interrelatati.
Eżempju:
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n - 1) + fibonacci(n - 2)
result = fibonacci(6)
print(result)
Riżultat:
8
5-Nested Rikorsjoni
Rikursjoni nested żżid grad eċċitanti ta 'kumplessità għall-univers rikorsiv. F'din il-forma ta' rikorsi, funzjoni tinkorpora sejħa rikorsiva bħala argument fi ħdan sejħa rikorsiva oħra.
Is-sejħa rikorsiva ta 'ġewwa taġixxi fuq valur li huwa dipendenti fuq is-sejħa rikkursiva ta' barra. Il-kumplessità tikber ma 'kull invokazzjoni nested, li tilħaq il-qofol tagħha f'mudell intriganti ta' sejħiet rikorsivi nested.
Eżempju:
def nested_recursion(n):
if n > 100:
return n - 10
return nested_recursion(nested_recursion(n + 11))
result = nested_recursion(95)
print(result)
Riżultat:
91
6-Denb Rikorsjoni
Ir-rikorsjoni tad-denb hija teknika ta 'ottimizzazzjoni għal algoritmi rikorsivi li jistgħu jtejbu l-prestazzjoni tagħhom. Is-sejħa rikorsiva tidher bħala l-azzjoni finali ta 'funzjoni b'rikorsjoni tad-denb, tagħmel.
Minħabba li m'hemm l-ebda operazzjoni pendenti wara s-sejħa rikorsiva, il-kompilatur jew l-interpretu jistgħu jissimplifikaw ir-rikorsis billi jibdluha b'qabża sempliċi.
Dan l-approċċ ta 'ottimizzazzjoni, magħruf bħala ottimizzazzjoni tas-sejħa tad-denb, inaqqas ir-rekwiżit għal kull sejħa rikorsiva biex iżżomm qafas ta' munzell, li jirriżulta f'veloċità msaħħa u użu tal-memorja aktar baxx.
Eżempju:
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-Rikorsjoni Mhux Denb
B'kuntrast mar-rikorsjoni tad-denb, ir-rikorsjoni mhux tad-denb tinvolvi attivitajiet żejda mwettqa wara s-sejħa rikorsiva fi ħdan funzjoni. Qabel ma jkunu jistgħu jsiru aktar azzjonijiet, kull sejħa rikorsisiva trid titlesta u terġa' lura.
Bħala konsegwenza, sakemm jintlaħaq il-każ bażi u tispiċċa r-rikors, jinżamm munzell ta 'operazzjonijiet pendenti. Ir-rikorsjoni mhux tad-denb ta 'spiss tuża aktar memorja u hija inqas effiċjenti mir-rikorżjoni tad-denb, iżda għadha għodda ta' għajnuna biex tindirizza varjetà ta 'kwistjonijiet.
Eżempju:
def non_tail_sum(n):
if n == 0:
return 0
return n + non_tail_sum(n - 1)
result = non_tail_sum(5)
print(result)
Riżultat:
15
Nagħlaq
Ir-rikors huwa kunċett intriganti fl-ipprogrammar. Jippermettilna nindirizzaw problemi kkumplikati b'mod rikursiv u awtoreferenzjali.
Joffri metodu distint ta' kif wieħed jaħseb u ssolvi l-problemi, billi jqassamhom f'biċċiet iżgħar u aktar maniġġabbli. Meta taħdem bir-rikors, madankollu, huwa kritiku li tuża tagħti attenzjoni għal xi punti.
Għandek tidentifika każijiet bażi xierqa li jippermettu li tintemm ir-rikors. Jekk ma jkunux preżenti, il-funzjoni tista 'tkompli ssejjaħ lilha nnifisha għal dejjem.
It-tieni, ibbażat fuq ix-xenarju preżenti, l-għażla tat-tip xieraq ta 'rikorżjoni tista' twassal għal soluzzjonijiet aktar effiċjenti u eleganti. Ipprova sib dak li jaħdem l-aħjar għall-problema fl-idejn. Meta taħdem ma 'fond ta' rikorżjoni vasti, kun konxju tal-perikli potenzjali bħall-overflow tal-munzell.
Ħalli Irrispondi