De ce ar trebui să înveți recursivitatea chiar dacă nu o vei folosi niciodată? Soluțiile recursive vă antrenează cu câteva mentalități: 1. În loc să încercați să generați soluția, de multe ori începeți cu "care este structura unei soluții valide" lucrați invers. Pentru unele probleme, lucrul înapoi este mult mai ușor. 2. Când rezolvi problema, este ușor să fii distras de toate "ce-ar fi dacă". Când rezolvi o problemă recursiv, de multe ori ești forțat să "ignori" 90% din probleme și să te concentrezi pe obținerea unei singure părți corecte. 3. Ceea ce ar fi adesea un caz de "colț" într-o soluție imperativă este un "caz de bază" într-un recursiv. Gândirea recursivă te forțează uneori să nu ignori cazurile de colț. În plus, soluțiile recursive folosesc intens potrivirea modelelor, astfel încât să fii forțat să te gândești la toate situațiile pe care le-ai putea întâlni. Iată un exemplu foarte bun: Leetcode 335 Self Crossing (problemă dificilă). Călătoriți pe o traiectorie spiralată pe o grilă (adică întotdeauna virați la stânga după ce parcurgeți o anumită distanță spre nord, sud, est sau vest). Întrebarea este: "având în vedere distanța fiecărui "segment" al spiralei în ordine, spirala s-a intersectat sau nu?" Deși soluția la acest lucru nu trebuie să fie o funcție care se numește singură, soluția "drăguță" folosește proprietăți recursive: 1. Dacă nu am găsit încă o încrucișare, atunci putem presupune că nu există încrucișări sau spirale invalide în trecut. În plus, observăm că nu contează dacă călătorim la stânga, la dreapta, în sus sau în jos, deoarece putem vira doar la stânga. Tot ce ne pasă este dacă segmentele anterioare sunt paralele cu rândul nostru anterior și cât de departe sunt. 2. Când virăm la stânga, există un număr extrem de limitat de "segmente" în spirală în care ne putem prăbuși, ceea ce este "recursiv" adevărat, indiferent cât de mare devine spirala. Există o mulțime de date din trecut despre spirală pe care le putem ignora. 3. Există un număr limitat de scenarii în rândul tău anterior care îți afectează logica: a) ai călătorit suficient de departe pentru a nu te ciocni de nimic, b) dacă nu, în ce te-ai putea prăbuși? (de asemenea, limitat). Lucrul enervant despre hard-urile Leetcode este că devin brusc ușoare dacă găsești o perspectivă cheie. Dar aceste informații cheie îți vor veni mai natural dacă te-ai antrenat în programare recursivă. Nu este vorba doar de a proiecta funcții care se numesc singure - este vorba despre a te forța să descompuni problema în așa fel încât să poată fi rezolvată cu o funcție care se cheamă singură. Cu cât poți rezolva o problemă în mai multe moduri, cu atât este mai probabil să găsești o soluție "aha". Evident, nu trebuie să fac leetcode în profesia mea, dar trebuie să găsesc modalități creative de a descompune problemele, astfel încât acestea să devină ușor de înțeles - iar antrenamentul în recursivitate a ajutat cu siguranță în acest sens.
1,66K