A recursão - como todos sabemos - é um desses problemas - que envolver sua cabeça parece alcançar um "marco" em sua viagem de programação.
Mas quando se trata de realmente usá-lo em problemas do mundo real - conhecer a mecânica da recursão NÃO é suficiente - é preciso também entender a natureza dos problemas em que a recursão é a solução mais adequada.
Então, minha pergunta é esta ...
- quais são os "padrões de problemas" que exigem a solução da recursão
- recursão é uma forma de estratégia "dividir e conquistar" ou uma forma de "reutilização de código" - ou é um padrão de design por si só
- você pode nos dar um exemplo de um problema do mundo real em que a recursão vem à mente como uma solução imediata
- ATUALIZAÇÃO -
muitas respostas estão se referindo a "problemas reais" como atravessar árvores, fatorial etc. Eu preferiria "os problemas reais REAIS" - deixe-me dar um exemplo ...
Tínhamos uma grande quantidade de texto (cerca de 30 MB de texto como uma lista vinculada structs
) e precisávamos fazer um índice para pesquisa de texto completo. Precisávamos manter o índice inteiro na memória e indexar novamente o texto a cada 10 minutos.
A cada 10 minutos, comparávamos o texto inteiro (duas listas vinculadas, linha por linha) com um pedaço de texto recém-gerado - para ver qual linha foi alterada - e então reindexamos apenas essa linha - dessa maneira poderíamos evitar ter que indexar novamente o texto INTEIRO. Lembre-se - precisávamos encontrar os pontos de diferença entre duas listas vinculadas de 30 MB.
Um dos meus colegas criou um programa fantástico que usava recursão PESADA para comparar as linhas - e depois coletar as posições em que os mandris diferiam em uma matriz - sim, eu sei que parece intrigante - como a recursão poderia ajudar aqui - mas fez.
A questão é: como ele pôde ver que esse problema poderia ser resolvido de maneira inteligente com o uso pesado de recursão?