Recomendado, 2024

Escolha Do Editor

Diferença entre recursão e iteração

Recursão e iteração executam repetidamente o conjunto de instruções. Recursão é quando uma instrução em uma função chama a si mesma repetidamente. A iteração é quando um loop executa repetidamente até que a condição de controle se torne falsa. A principal diferença entre recursão e iteração é que uma recursão é um processo, sempre aplicado a uma função. A iteração é aplicada ao conjunto de instruções que queremos executar repetidamente.

Gráfico de comparação

Base para ComparaçãoRecursãoIteração
BasicA declaração em um corpo de função chama a função em si.Permite que o conjunto de instruções seja executado repetidamente.
FormatoNa 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çãoUma 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çãoSe 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 InfinitaRecursão infinita pode travar o sistema.Loop infinito usa ciclos de CPU repetidamente.
AplicadoA recursão é sempre aplicada a funções.A iteração é aplicada a instruções de iteração ou "loops".
PilhaA 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 sobrecargaA recursão possui a sobrecarga de chamadas de função repetidas.Nenhuma sobrecarga de chamada de função repetida.
RapidezLento em execução.Rápido em execução.
Tamanho do códigoA 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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. A recursão infinita pode levar à falha do sistema, enquanto a iteração infinita consome ciclos da CPU.
  6. A recursão é sempre aplicada ao método, enquanto a iteração é aplicada ao conjunto de instruções.
  7. As variáveis ​​criadas durante a recursão são armazenadas na pilha, enquanto a iteração não requer uma pilha.
  8. 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.
  9. Devido à função chamada, a execução indireta da recursão é mais lenta, enquanto a execução da iteração é mais rápida.
  10. 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.

Top