Use o botão abaixo para reportar erros ou dar sugestões.

Computação Científica - Um Livro Colaborativo

6.5 Recursão


Quando uma função chama ela mesma.

Exemplo 6.5.1. Escreva uma função que imprime os n primeiros números em ordem crescente.

Primeiro vamos resolver o problema usando um laço de repetição

#include <stdio.h>  
#include <math.h>  
 
int main(int argc, char **argv)  
{  
  int i,N;  
  N=atoi(argv[1]);  
  for(i=0;i<=N;i++) printf("%d\n",i);  
}

Agora, vamos trocar o for por uma função recursiva.

#include <stdio.h>  
#include <math.h>  
 
void imprime(int i)  
{  
 
 if(i<0) return;  
 imprime(i-1);  
 printf("%d\n",i);  
}  
 
int main(int argc, char **argv)  
{  
  int i,N;  
  N=atoi(argv[1]);  
  imprime(N);  
}

Observe no último programa que a função imprime chama ela mesma. Observe que a primeira linha dentro da função recursiva é o critério de parada. Isso é fundamental, pois caso contrário, a função seria executada até acabar a memória do computador. Vamos tentar entender o que faz a função imprime(3):

  • Quando chamamos imprime(3), temos i=3, logo a função não para no primeiro if.
  • Então a função chama imprime(2) antes de imprimir.
  • O imprime(2) se repete os passos do imprime(3) e chama o imprime(1), também antes de imprimir.
  • Depois imprime(0) e imprime(-1).
  • imprime(-1) termina na primeira linha, pois -1<0.
  • Ainda dentro do imprime(0), a função imprime printf("%d\n",0);.
  • Uma vez que fecha o imprime(0), vai para o término da função imprime(1) e escreve printf("%d\n",1);.
  • Sucessivamente, o as funções imprime(2) e imprime(3) terminam com printf("%d\n",2); e printf("%d\n",3);

Creative Commons License Este texto é disponibilizado nos termos da licença Creative Commons Atribuição-CompartilhaIgual 3.0 Não Adaptada (CC-BY-SA 3.0). Página gerada em 19/8/2020 às 17:33:17.

Informe erros ou edite você mesmo!