Populaire onderwerpen
#
Bonk Eco continues to show strength amid $USELESS rally
#
Pump.fun to raise $1B token sale, traders speculating on airdrop
#
Boop.Fun leading the way with a new launchpad on Solana.
Waarom zou je recursie moeten leren, zelfs als je het nooit zult gebruiken?
Recursieve oplossingen trainen je in een paar denkwijzen:
1. In plaats van te proberen de oplossing te genereren, begin je vaak met "wat is de structuur van een geldige oplossing" en werk je achteruit. Voor sommige problemen is het veel gemakkelijker om achteruit te werken.
2. Wanneer je het probleem oplost, is het gemakkelijk om afgeleid te worden door alle "wat als"-scenario's. Bij het oplossen van een probleem recursief, ben je vaak gedwongen om 90% van de problemen te "negeren" en je te concentreren op het goed krijgen van slechts één deel.
3. Wat vaak een "hoek"-geval zou zijn in een imperatieve oplossing, is een "basisgeval" in een recursieve. Recursief denken dwingt je soms om de hoekgevallen niet te negeren. Bovendien maken recursieve oplossingen veel gebruik van patroonherkenning, waardoor je gedwongen wordt om aan alle situaties te denken die je zou kunnen tegenkomen.
Hier is een echt goed voorbeeld: Leetcode 335 Zelfkruising (moeilijk probleem).
Je reist op een spiraalvormige traject op een rooster (d.w.z. altijd naar links draaien na een bepaalde afstand naar het noorden, zuiden, oosten of westen). De vraag is: "gegeven de afstand van elk 'segment' van de spiraal in volgorde, kruiste de spiraal zichzelf of niet?"
Hoewel de oplossing hiervoor geen functie hoeft te zijn die zichzelf aanroept, gebruikt de "mooie" oplossing recursieve eigenschappen:
1. als we nog geen kruising hebben gevonden, kunnen we aannemen dat er geen kruisingen of ongeldige spiralen in het verleden zijn. We merken bovendien op dat het niet uitmaakt of we naar links, rechts, omhoog of omlaag reizen, omdat we alleen naar links kunnen draaien. Het enige wat we belangrijk vinden, is of de vorige segmenten parallel zijn aan onze vorige draai en hoe ver ze van elkaar verwijderd zijn.
2. wanneer we naar links draaien, is er een extreem beperkt aantal "segmenten" in de spiraal waar we tegenaan kunnen botsen, wat "recursief" waar is, ongeacht hoe groot de spiraal wordt. Er zijn veel gegevens over het verleden van de spiraal die we kunnen negeren.
3. Er zijn een beperkt aantal scenario's in je vorige draai die je logica beïnvloeden: a) heb je ver genoeg gereisd om niet tegen iets aan te botsen, b) zo niet, wat zou je potentieel kunnen raken? (ook beperkt).
Het vervelende aan Leetcode-moeilijkheden is dat ze plotseling gemakkelijk worden als je de sleutelinzichten vindt. Maar die sleutelinzichten komen natuurlijker naar je toe als je jezelf hebt getraind in recursief programmeren.
Het gaat niet alleen om het ontwerpen van functies die zichzelf aanroepen — het gaat erom jezelf te dwingen het probleem zo op te splitsen dat het kan worden opgelost met een functie die zichzelf aanroept. Hoe meer manieren je een probleem kunt opsplitsen, hoe waarschijnlijker het is dat je een "aha"-oplossing vindt.
Natuurlijk hoef ik niet te leetcode in mijn beroep, maar ik moet wel creatieve manieren vinden om problemen op te splitsen zodat ze begrijpelijk worden — en training in recursie heeft daar zeker bij geholpen.

1,67K
Boven
Positie
Favorieten