Gráfico de comparação
Base para Comparação | Recursão | Iteração |
---|---|---|
Basic | A declaração em um corpo de função chama a função em si. | Permite que o conjunto de instruções seja executado repetidamente. |
Formato | Na função recursiva, apenas a condição de terminação (caso base) é especificada. | A iteração inclui inicialização, condição, execução da instrução dentro do loop e atualização (incrementos e decrementos) da variável de controle. |
Terminação | Uma instrução condicional é incluída no corpo da função para forçar a função a retornar sem que a chamada de recursão seja executada. | A instrução de iteração é executada repetidamente até que uma determinada condição seja atingida. |
Condição | Se a função não converge para alguma condição chamada (caso base), ela leva à recursão infinita. | Se a condição de controle na instrução de iteração nunca se tornar falsa, isso levará à iteração infinita. |
Repetição Infinita | Recursão infinita pode travar o sistema. | Loop infinito usa ciclos de CPU repetidamente. |
Aplicado | A recursão é sempre aplicada a funções. | A iteração é aplicada a instruções de iteração ou "loops". |
Pilha | A pilha é usada para armazenar o conjunto de novas variáveis locais e parâmetros cada vez que a função é chamada. | Não usa pilha. |
A sobrecarga | A recursão possui a sobrecarga de chamadas de função repetidas. | Nenhuma sobrecarga de chamada de função repetida. |
Rapidez | Lento em execução. | Rápido em execução. |
Tamanho do código | A recursão reduz o tamanho do código. | A iteração torna o código mais longo. |
Definição de Recursão
C ++ permite que uma função se chame dentro de seu código. Isso significa que a definição da função possui uma chamada de função para si mesma. Às vezes, também é chamado de " definição circular ". O conjunto de variáveis locais e parâmetros usados pela função são criados novamente toda vez que a função chama a si mesma e são armazenados no topo da pilha. Porém, toda vez que uma função chama a si mesma, ela não cria uma nova cópia dessa função. A função recursiva não reduz significativamente o tamanho do código e nem sequer melhora a utilização da memória, mas faz alguma quando comparada à iteração.
Para finalizar a recursão, você deve incluir uma instrução select na definição da função para forçar a função a retornar sem dar uma chamada recursiva a si mesma. A ausência da instrução select na definição de uma função recursiva permitirá que a função em recursão infinita seja chamada uma vez.
Vamos entender a recursão com uma função que retornará o fatorial do número.
int fatorial (int num) {int resposta; if (num == 1) {retorno 1; } else {answer = fatorial (num-1) * num; // chamada recursiva} return (resposta); }
No código acima, a declaração em outra parte mostra a recursão, como a instrução chama a função fatorial () na qual ela reside.
Definição de Iteração
Iteração é um processo de executar o conjunto de instruções repetidamente até que a condição na declaração de iteração se torne falsa. A declaração de iteração inclui a inicialização, comparação, execução das instruções dentro da declaração de iteração e, finalmente, a atualização da variável de controle. Depois que a variável de controle é atualizada, ela é comparada novamente, e o processo se repete, até que a condição na declaração de iteração se torne falsa. As instruções de iteração são loop “for”, loop “while”, loop “do-while”.
A instrução de iteração não usa uma pilha para armazenar as variáveis. Portanto, a execução da instrução de iteração é mais rápida em comparação com a função recursiva. Mesmo a função de iteração não tem a sobrecarga da chamada de função repetida que também torna sua execução mais rápida que a função recursiva. A iteração é finalizada quando a condição de controle se torna falsa. A ausência de condição de controle na declaração de iteração pode resultar em um loop infinito ou pode causar um erro de compilação.
Vamos entender a iteração sobre o exemplo acima.
int fatorial (int num) {int resposta = 1; // precisa de inicialização porque pode conter um valor de lixo antes de sua inicialização para (int t = 1; t> num; t ++) // iteração {answer = answer * (t); retorno (resposta); }}
No código acima, a função retorna o fatorial do número usando a declaração de iteração.
Principais diferenças entre recursão e iteração
- Recursão é quando um método em um programa chama-se repetidamente enquanto, iteração é quando um conjunto de instruções em um programa é executado repetidamente.
- Um método recursivo contém um conjunto de instruções, a instrução chamando a si mesma e uma condição de finalização, enquanto as instruções de iteração contêm inicialização, incremento, condição, conjunto de instruções dentro de um loop e uma variável de controle.
- Uma instrução condicional decide o término da recursão e o valor da variável de controle decide o término da instrução de iteração.
- Se o método não levar à condição de terminação, ele entrará na recursão infinita. Por outro lado, se a variável de controle nunca leva ao valor de terminação, a instrução de iteração itera infinitamente.
- A recursão infinita pode levar à falha do sistema, enquanto a iteração infinita consome ciclos da CPU.
- A recursão é sempre aplicada ao método, enquanto a iteração é aplicada ao conjunto de instruções.
- As variáveis criadas durante a recursão são armazenadas na pilha, enquanto a iteração não requer uma pilha.
- A recursão causa a sobrecarga da chamada de função repetida, enquanto a iteração não tem uma função que chama a sobrecarga.
- Devido à função chamada, a execução indireta da recursão é mais lenta, enquanto a execução da iteração é mais rápida.
- A recursão reduz o tamanho do código, enquanto as iterações aumentam o código.
Conclusão:
A função recursiva é fácil de escrever, mas não tem um bom desempenho em comparação com a iteração, enquanto a iteração é difícil de escrever, mas seu desempenho é bom em comparação com a recursão.