Diferença entre recursão e iteração
Contente
A recursão e a iteração executam repetidamente o conjunto de instruções. Recursão é quando uma instrução em uma função se chama repetidamente. A iteração ocorre quando um loop é executado repetidamente até que a condição de controle se torne falsa. A principal diferença entre recursão e iteração é que é um recursão é um processo, sempre aplicado a uma função. o iteração é aplicado ao conjunto de instruções que queremos que sejam executadas repetidamente.
- Gráfico de comparação
- Definição
- Principais diferenças
- Conclusão
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 própria função. | Permite que o conjunto de instruções seja executado repetidamente. |
Formato | Na função recursiva, apenas a condição de finalizaçã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 o retorno da função 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 convergir para alguma condição chamada (caso base), isso leva a uma recursão infinita. | Se a condição de controle na instrução da iteração nunca se tornar falsa, isso levará à iteração infinita. |
Repetição infinita | A recursão infinita pode travar o sistema. | O loop infinito usa ciclos da CPU repetidamente. |
Aplicado | A recursão é sempre aplicada às 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 e parâmetros locais toda 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 na execução. | Rápido na 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 e parâmetros locais usados pela função é criado novamente cada vez que a função se chama e é armazenada na parte superior da pilha. Mas, sempre que uma função se chama, 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 melhora a utilização da memória, mas faz alguns quando comparados à iteração.
Para encerrar a recursão, você deve incluir uma instrução select na definição da função para forçar o retorno da função sem fazer uma chamada recursiva para si mesma. A ausência da instrução select na definição de uma função recursiva permitirá que a função entre em recursividade infinita uma vez chamada.
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) {retorna 1; } else {resposta = fatorial (num-1) * num; // chamada recursiva} return (answer); }
No código acima, a instrução na outra parte mostra a recursão, como a instrução chama a função fatorial () na qual reside.
Definição de Iteração
A iteração é um processo de execução repetida do conjunto de instruções até que a condição na instrução de iteração se torne falsa. A instrução de iteração inclui a inicialização, comparação, execução das instruções dentro da instruçã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 instruçã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 quando comparada à função recursiva. Mesmo a função de iteração não possui a sobrecarga de chamadas de função repetidas, o 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 instrução de iteração pode resultar em um loop infinito ou causar um erro de compilação.
Vamos entender a iteração em relação ao 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 instrução de iteração.
- Recursão é quando um método em um programa se chama repetidamente, enquanto iteração ocorre quando um conjunto de instruções em um programa é executado repetidamente.
- Um método recursivo contém conjunto de instruções, chamada de instrução e uma condição de terminação, enquanto as instruções de iteração contêm inicialização, incremento, condição, conjunto de instruções em um loop e uma variável de controle.
- Uma declaração condicional decide o término da recursão e o valor da variável de controle decide o término da declaração de iteração.
- Se o método não levar à condição de finalização, ele entrará em recursão infinita. Por outro lado, se a variável de controle nunca levar ao valor de finalizaçã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 sobrecarga de chamada de função.
- Devido à chamada de função, 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 tornam o código mais longo.
Conclusão:
A função recursiva é fácil de escrever, mas eles não apresentam um bom desempenho em comparação com a iteração, enquanto que a iteração é difícil de escrever, mas seu desempenho é bom em comparação com a recursão.