Recursividade em Linguagem C:
A função recursiva é um método de determinadas linguagens de programação de
executa-las a si mesmas, ou seja, dentro de um código, tem a capacidade de chamar
um “subcódigo” para ser executado. Porem a função não é ilimitado, pelo contrario, o
numero de vezes que uma função pode ser chamada recursivamente é do mesmo
tamanho da pilha (stack - um tipo abstrato de dado e estrutura de dados baseado)
quando o valor deste limite é alcançado o programa se termina como o erro: “Stack
overflow” ou ainda “erro: Stack fault”.

As funções recursivas são em sua maioria soluções mais elegantes e simples, se
comparadas funções mais tradicionais, já que utilizam tarefas repetitivas sem executar
uma estrutura de repetição como o while ou for. Apesar da simplicidade é preciso
tomar cuidado com certos problemas como o de pilha, e ainda como é pesada para
uma CPU utilizar a recursividade.

Como funciona:

Como já explicado a função recursiva chama a si mesma de uma forma limitada, para
entender melhor é mostrado duas divisões fundamentais desta função.

    Ponto de paragem: O ponto de paragem da recursividade deve ser definido
     sem a utilização da mesma, sendo este ponto geralmente um limite inferior ou
     superior ao limite geral.
    Regra geral: O método geral da recursividade reduz a resolução do problema
     através da invocação recursiva de casos menores sendo resolvidos por casos
     ainda menores e assim sucessivamente, até atingir o ponto de paragem que
     finaliza o método.

   Exemplo:

   #include<stdio. h>
   Int factorial (int n){
   If (n == 0 ) < ponto de paragem >
       Return 1;
   Else if (n < 0){
       Printf (“Fatorial negativo não é permitido.n”);
       Exit (0); }
   Return n*fatorial (n-1);
   }
Cada vez que uma função é chamada e executada corretamente de forma
recursiva, seus parâmetros obtêm copias que são alojadas e armazenadas
temporariamente, assim não perdendo os valores de chamadas anteriores e ainda
só sendo acessível a instancia do parâmetro criado inicialmente e não de outras
instancias.

Exemplo:

Entra  fatorial (5):

   5!  5*4!  4*3!  3*2!  2*1!  1*0! (0 = ponto de paragem) .

Volta ao inicio realizando e armazenando o resultado dos cálculos:

   1*(1)  2*(1)  3*(2)  4*(6)  5*(24)  120

Sai  120.

Conclusão:

A recursividade é um bom método de programação para problemas simples que
geralmente acabam por exigir certas funções de repetição. Essa função de
recursividade trará resultados rápidos tornando o método principal do programa
mais simples, por isso deve ser implementada como uma solução para diversos
problemas.

Referencias:

PDF’s de Silvana Maria Affonso e “sssinformatica”:

http://wiki.icmc.usp.br/images/a/aa/Aula09-Recursao_2010.pdf

http://www.sssinformatica.com.br/prc/Recursividade2.pdf




Nome: Leonardo N. Lima ADS – 2ºsemestre

Recursividade em linguagem C

  • 1.
    Recursividade em LinguagemC: A função recursiva é um método de determinadas linguagens de programação de executa-las a si mesmas, ou seja, dentro de um código, tem a capacidade de chamar um “subcódigo” para ser executado. Porem a função não é ilimitado, pelo contrario, o numero de vezes que uma função pode ser chamada recursivamente é do mesmo tamanho da pilha (stack - um tipo abstrato de dado e estrutura de dados baseado) quando o valor deste limite é alcançado o programa se termina como o erro: “Stack overflow” ou ainda “erro: Stack fault”. As funções recursivas são em sua maioria soluções mais elegantes e simples, se comparadas funções mais tradicionais, já que utilizam tarefas repetitivas sem executar uma estrutura de repetição como o while ou for. Apesar da simplicidade é preciso tomar cuidado com certos problemas como o de pilha, e ainda como é pesada para uma CPU utilizar a recursividade. Como funciona: Como já explicado a função recursiva chama a si mesma de uma forma limitada, para entender melhor é mostrado duas divisões fundamentais desta função.  Ponto de paragem: O ponto de paragem da recursividade deve ser definido sem a utilização da mesma, sendo este ponto geralmente um limite inferior ou superior ao limite geral.  Regra geral: O método geral da recursividade reduz a resolução do problema através da invocação recursiva de casos menores sendo resolvidos por casos ainda menores e assim sucessivamente, até atingir o ponto de paragem que finaliza o método. Exemplo: #include<stdio. h> Int factorial (int n){ If (n == 0 ) < ponto de paragem > Return 1; Else if (n < 0){ Printf (“Fatorial negativo não é permitido.n”); Exit (0); } Return n*fatorial (n-1); }
  • 2.
    Cada vez queuma função é chamada e executada corretamente de forma recursiva, seus parâmetros obtêm copias que são alojadas e armazenadas temporariamente, assim não perdendo os valores de chamadas anteriores e ainda só sendo acessível a instancia do parâmetro criado inicialmente e não de outras instancias. Exemplo: Entra  fatorial (5): 5!  5*4!  4*3!  3*2!  2*1!  1*0! (0 = ponto de paragem) . Volta ao inicio realizando e armazenando o resultado dos cálculos: 1*(1)  2*(1)  3*(2)  4*(6)  5*(24)  120 Sai  120. Conclusão: A recursividade é um bom método de programação para problemas simples que geralmente acabam por exigir certas funções de repetição. Essa função de recursividade trará resultados rápidos tornando o método principal do programa mais simples, por isso deve ser implementada como uma solução para diversos problemas. Referencias: PDF’s de Silvana Maria Affonso e “sssinformatica”: http://wiki.icmc.usp.br/images/a/aa/Aula09-Recursao_2010.pdf http://www.sssinformatica.com.br/prc/Recursividade2.pdf Nome: Leonardo N. Lima ADS – 2ºsemestre