Por que você deveria aprender recursão mesmo que nunca a use? As soluções recursivas treinam você em algumas mentalidades: 1. Em vez de tentar gerar a solução, você geralmente começa com "qual é a estrutura de uma solução válida" de trás para frente. Para alguns problemas, trabalhar de trás para frente é muito mais fácil. 2. Quando você está resolvendo o problema, é fácil se distrair com todos os "e se". Ao resolver um problema recursivamente, muitas vezes você é forçado a "ignorar" 90% dos problemas e se concentrar em acertar apenas uma parte. 3. O que muitas vezes seria um caso "extremo" em uma solução imperativa é um "caso base" em um on recursivo. Pensar recursivamente às vezes força você a não ignorar os casos extremos. Além disso, as soluções recursivas fazem uso intenso da correspondência de padrões, de modo que você é forçado a pensar em todas as situações que pode encontrar. Aqui está um exemplo muito bom: Leetcode 335 Self Crossing (problema difícil). Você viaja em uma trajetória espiral em uma grade (ou seja, sempre vire à esquerda depois de percorrer alguma distância ao norte, sul, leste ou oeste). A questão é: "dada a distância de cada 'segmento' da espiral em ordem, a espiral se cruzou ou não?" Embora a solução para isso não precise ser uma função chamando a si mesma, a solução "legal" usa propriedades recursivas: 1. Se ainda não encontramos um cruzamento, podemos assumir que não há cruzamentos ou espirais inválidas no passado. Além disso, notamos que não importa se estamos viajando 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 ao nosso turno anterior e a que distância eles estão. 2. Quando viramos à esquerda, há um número extremamente limitado de "segmentos" na espiral em que podemos colidir, o que é "recursivamente" verdadeiro, não importa o quão grande a espiral fique. Existem muitos dados anteriores sobre a espiral que podemos ignorar. 3. Há um número limitado de cenários em seu turno anterior que afetam sua lógica: a) você viajou longe o suficiente para não colidir com nada, b) se não, no que você poderia colidir? (também limitado). A coisa irritante sobre os hards Leetcode é que eles de repente se tornam fáceis se você encontrar o insight principal. Mas esses insights importantes virão a você com mais naturalidade se você se treinou em programação recursiva. Não se trata apenas de projetar funções que se chamam - trata-se de se forçar a quebrar o problema de tal forma que ele possa ser resolvido com uma função chamando a si mesma. Quanto mais maneiras você puder resolver um problema, maior será a probabilidade de encontrar uma solução "aha". Obviamente, não preciso fazer um leetcode na minha profissão, mas preciso encontrar maneiras criativas de quebrar os problemas para que eles se tornem compreensíveis – e o treinamento em recursão definitivamente ajudou nisso.
1,67K