11.5 recursão e iteração

Algumas fórmulas iterativas em engenharia, como a equação de Hazen-Williams, são necessariamente recursivas. Não conheço outra maneira de resolver essa equação.

Também trabalhei com uma fórmula para alocar fundos federais aos estados. A única maneira de resolver a distribuição era por recursão.

Portanto, às vezes não há como sair da recursão. Algumas vezes, a única maneira de obter resultados precisos não é elegante e requer o uso de recursão.

Há alguma sobrecarga extra em chamadas de função recursivas. Em muitos casos, é insignificante e a complexidade necessária para evitá-lo não se justifica. No entanto, é sempre possível alternar para uma abordagem iterativa em que o programa mantém sua (s) própria (s) pilha (s) de informações que precisam ser preservadas para cada nível do que seria a recursão. Às vezes, isso pode tornar o programa mais eficiente.

A recursão é logicamente eficiente e, portanto, eficiente da CPU apenas para algumas coisas. No entanto, ele usa muito mais memória do que loops, pois a cada passo recursivo a função é chamada, mas o antigo ainda é armazenado na memória.

Qualquer algoritmo recursivo pode ser reescrito para ser iterativo sem as chamadas recursivas, mas o resultado final pode ser muito mais complexo de ler ou depurar, dependendo da complexidade do algoritmo. A recursão simples da cauda pode não ser um grande problema. O retrocesso recursivo, por exemplo, pode ser muito mais difícil de converter.

A memória extra consumida para recursão depende muito de quanto estado interno precisa ser mantido na pilha para cada chamada. Se a otimização do consumo de memória não é uma preocupação, então se torna um "não importa". Como foi afirmado em outro lugar, a sobrecarga na preparação da chamada recursiva é provavelmente insignificante em relação ao tempo de processamento de cada iteração, para qualquer coisa que não seja operações relativamente triviais. Portanto, pondere o que é mais importante: eliminar cada ciclo de eficiência do processamento real ou manter o código passível de manutenção, leitura e depuração.

Não há uma resposta geral “sim / não” para sua pergunta. Em qualquer problema do mundo real, você precisa verificar quais aspectos são mais importantes para otimizar e escolher a abordagem que atende aos requisitos. Talvez a recursão seja útil nesse evento, talvez não.