Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou praticando exercícios de recursão, mas eu notei que variáveis locais se repetem muito, enquanto uma iteração não faz isso.
Isso prejudica o desempenho do programa, de alguma forma?
Eu só postei aqui, porque no Google está difícil de compreender. Se alguém puder ser mais claro, eu agradeço.
Como saber quando devo usar recursão ou iteratividade?
Olhem o as variáveis repetidas:
/applications/core/interface/imageproxy/imageproxy.php?img=http://i.imgur.com/pAQ5aQl.png?1&key=2027d87a1302c601f261a8e2f60f341d49e01c42d6d9688e9e068ef1b1d555e7" alt="pAQ5aQl.png?1" />
Atualização: Li mais, mas continuo com alguns conceitos vagos. Quem quiser dar sua opinião, vai me ajudar!
Eu li que a recursão é bom por causa da "elegância" que gera no código e algumas vezes dá performance, mas essa repetição de variáveis, na recursividade, é como uma pilha de documentos que vai crescendo e depois se desempilha e, caso ela seja muito grande venha a dar erro. Um conhecido erro, chamado "StackOverFlow.
Agora estou confuso, porque se a recursão for muito grande ou mesmo pequena, essa pilha não iria atrapalhar a execução mais que uma iteração?
Não, a recursão não gera uma pilha na stack, pelo contrário, ela reduz o uso da stack na função. Ela só vai causar StackOverflow se você ficar sempre inicializando um novo objeto ou uma nova instancia a cada iteração da recursão, dessa forma ele sempre vai inicializar outra instancia e não vai nunca dar dispose. Desta forma os objetos vão ser alocados sem parar.
Por definição, não se usa variáveis instanciadas em uma recursão, ou se usar seria válido destruir a mesma no final da iteração para evitar esses tipos de erros.
pelo que aprendi sobre isso com um professor da faculdade ele disse que a recursividade cria uma nova camada da mesma variável, tipo memória em pilha, e por isso não era mais útil usar recursividade...apenas em casos de algoritmos de calda(não sei o que é isso!).
pelo que aprendi sobre isso com um professor da faculdade ele disse que a recursividade cria uma nova camada da mesma variável, tipo memória em pilha, e por isso não era mais útil usar recursividade...apenas em casos de algoritmos de calda(não sei o que é isso!).
Hoje em dia já cheguei a esta mesma conclusão, por isso acredito que o Khaos talvez estava em dúvida, também.
Recursão é sempre melhor do que iteração porque não consome tanta memória. Dependendo de como a linguagem gerencia a criação de variáveis, uma iteração vai criar um contador e um controle de laço, enquanto a recursão vai alocar o mesmo espaço da memória e utilizá-lo várias vezes seguidas alterando seu valor a cada passada.
Sempre que for necessário realizar uma tarefa repetitiva que utilize os mesmos recursos constantemente, ou então algo que realize a mesma tarefa várias vezes seguidas, opte sempre por recursão. Um bom exemplo é o algoritmo fatorial (n!), existem modos de fazê-lo por iteração ou por recursão, mas se você criar um algoritmo dos dois modelos na mesma linguagem e depois rodar um profile de memória, você verá que a iteração consome muito mais tempo de processamento e memória do que uma função recursiva.