Argomenti di tendenza
#
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.
Perché dovresti imparare la ricorsione anche se non la userai mai?
Le soluzioni ricorsive ti allenano su alcuni modi di pensare:
1. Invece di cercare di generare la soluzione, spesso inizi con “qual è la struttura di una soluzione valida” e lavori all'indietro. Per alcuni problemi, lavorare all'indietro è molto più facile.
2. Quando stai risolvendo il problema, è facile distrarsi con tutti i “cosa succede se.” Quando risolvi un problema in modo ricorsivo, sei spesso costretto a “ignorare” il 90% delle questioni e concentrarti su un solo aspetto da sistemare.
3. Quello che spesso sarebbe un caso “marginale” in una soluzione imperativa è un “caso base” in una ricorsiva. Pensare in modo ricorsivo a volte ti costringe a non ignorare i casi marginali. Inoltre, le soluzioni ricorsive fanno ampio uso del pattern matching, quindi sei costretto a pensare a tutte le situazioni che potresti incontrare.
Ecco un esempio davvero buono: Leetcode 335 Self Crossing (problema difficile).
Viaggi su una traiettoria a spirale su una griglia (cioè giri sempre a sinistra dopo aver viaggiato per una certa distanza a nord, sud, est o ovest). La domanda è: “data la distanza di ciascun ‘segmento’ della spirale in ordine, la spirale si è incrociata o no?”
Sebbene la soluzione a questo non debba essere una funzione che chiama se stessa, la soluzione “carina” utilizza proprietà ricorsive:
1. se non abbiamo ancora trovato un incrocio, possiamo assumere che non ci siano incroci o spirali non valide nel passato. Inoltre, notiamo che non importa se stiamo viaggiando a sinistra, a destra, in alto o in basso, perché possiamo solo girare a sinistra. Ciò che ci interessa è se i segmenti precedenti sono paralleli alla nostra precedente svolta e quanto sono distanti.
2. quando giriamo a sinistra, c'è un numero estremamente limitato di “segmenti” nella spirale in cui possiamo scontrarci, il che è “ricorsivamente” vero indipendentemente da quanto grande diventi la spirale. Ci sono molti dati passati sulla spirale che possiamo ignorare.
3. C'è un numero limitato di scenari nella tua precedente svolta che influenzano la tua logica: a) hai viaggiato abbastanza lontano da non scontrarti con nulla, b) se no, in cosa potresti potenzialmente scontrarti? (anche questo è limitato).
La cosa fastidiosa dei problemi difficili di Leetcode è che diventano improvvisamente facili se trovi l'intuizione chiave. Ma quelle intuizioni chiave ti verranno più naturalmente se ti sei allenato nella programmazione ricorsiva.
Non si tratta solo di progettare funzioni che chiamano se stesse — si tratta di costringerti a scomporre il problema in modo tale che possa essere risolto con una funzione che chiama se stessa. Più modi hai per scomporre un problema, più è probabile che tu trovi una soluzione “aha.”
Ovviamente, non ho bisogno di fare Leetcode nella mia professione, ma ho bisogno di trovare modi creativi per scomporre i problemi affinché diventino comprensibili — e l'allenamento nella ricorsione mi ha sicuramente aiutato in questo.

1,67K
Principali
Ranking
Preferiti