Tópicos populares
#
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.
Por que deverias aprender recursão mesmo que nunca a uses?
Soluções recursivas treinam-te em algumas mentalidades:
1. Em vez de tentares gerar a solução, muitas vezes começas com “qual é a estrutura de uma solução válida” e trabalhas para trás. Para alguns problemas, trabalhar para trás é muito mais fácil.
2. Quando estás a resolver o problema, é fácil distrair-te com todos os “e se”. Ao resolver um problema recursivamente, muitas vezes és forçado a “ignorar” 90% das questões e focar-te em acertar apenas uma parte.
3. O que muitas vezes seria um caso “marginal” numa solução imperativa é um “caso base” numa recursiva. Pensar recursivamente às vezes força-te a não ignorar os casos marginais. Além disso, soluções recursivas fazem uso intensivo de correspondência de padrões, por isso és forçado a pensar em todas as situações que poderias encontrar.
Aqui está um exemplo muito bom: Leetcode 335 Self Crossing (Problema difícil).
Viajas numa trajetória espiral num grid (ou seja, sempre viras à esquerda após viajar uma certa distância para norte, sul, leste ou oeste). A questão é: “dada a distância de cada ‘segmento’ da espiral em ordem, a espiral cruzou-se a si mesma ou não?”
Embora a solução para isto não precise ser uma função a chamar-se a si mesma, a solução “bonita” utiliza propriedades recursivas:
1. se ainda não encontramos um cruzamento, então podemos assumir que não há cruzamentos ou espirais inválidas no passado. Notamos ainda que não importa se estamos a viajar para a esquerda, direita, para cima ou para baixo, porque só podemos virar à esquerda. Tudo o que nos importa é se os segmentos anteriores são paralelos à nossa viragem anterior e quão longe estão.
2. quando viramos à esquerda, há um número extremamente limitado de “segmentos” na espiral com os quais podemos colidir, o que é “recursivamente” verdade não importa quão grande a espiral se torne. Há muitos dados passados sobre a espiral que podemos ignorar.
3. Há um número limitado de cenários na tua viragem anterior que afetam a tua lógica: a) viajaste longe o suficiente para não colidir com nada, b) se não, com o que poderias potencialmente colidir? (também limitado).
A parte irritante dos problemas difíceis do Leetcode é que de repente se tornam fáceis se encontrares a chave de insight. Mas esses insights-chave virão a ti de forma mais natural se te tiveres treinado em programação recursiva.
Não se trata apenas de desenhar funções que se chamam a si mesmas — trata-se de forçar-te a dividir o problema de tal forma que possa ser resolvido com uma função a chamar-se a si mesma. Quanto mais formas conseguires dividir um problema, mais provável é que encontres uma solução “aha”.
Obviamente, não preciso de fazer Leetcode na minha profissão, mas preciso de encontrar formas criativas de dividir problemas para que se tornem compreensíveis — e o treino em recursão ajudou-me definitivamente com isso.

1,65K
Top
Classificação
Favoritos