Programação
 › Algoritmo  › C/C++  › Java
Web
 › HTML/XHTML  › JavaScript  › PHP
Sistema Operacional
 › Comandos de DOS  › Windows  › Linux  › Mac/BSD
Office
 › Word / Writer  › Excel / Calc
Áreas do Site
 › Download  › Fórum  › Blog
Recomendamos
Computadores e Informática em Lisboa
TI Expert » Programação » C/C++ » Recursividade

Recursividade

O que é recursividade? Bem, recursividade não é um comando, mas uma "habilidade" de uma função chamar a si mesma. Isto não é privilégio apenas da linguagem C, muitas outras linguagens como Java, Visual Basic, entre outras também é possível ser feito isso.

Mas é importante entender este conceito, pois ele é muito útil e pode ajudar a deixar seu algoritmo muito mais simples.

Como fazemos uma função chamar ela mesma?

É simples, basta escrever no código da função, a função que está sendo criada como se ela já tivesse sido criada antes. Parece estranho isso, mas vamos imaginar um exemplo simples: Temos um programa - sabemos que o código do programa está todo dentro da função MAIN - se quisermos reiniciar o programa basta chamarmos a função MAIN novamente.

Seria como

#include <iostream>
#include <cstdlib>
using namespace std;

int main (void){
    int a, b, c, opcao;
    cout <<"Digite o valor de A: ";
    cin >> a;
    cin.ignore();
    cout <<"Digite o valor de B: ";
    cin >> b;
    cin.ignore();
    c=a+b;
    cout <<"O resultado de A + B e "<<c<<"\n\n
\Deseja reiniciar o programa e realizar outro calculo?\n
\1. Sim\t2.Nao\n\n=> ";
    cin >> opcao;
    if (opcao==1)
        /* se '1' for digitado, a função MAIN chama
           a função MAIN, ou seja, reinicia o programa.*/
        main();
    else
        return EXIT_SUCCESS;
}

* iniciou o programa
-> Chama automaticamente a função MAIN

* processos e comandos dentro do código
-> Contas com variáveis, condições, atribuições, etc...

* chama-se a função MAIN
-> Sem fechar o programa, ele chama ele mesmo de novo (reinicia)

Basicamente o processo é esse.

Muito provavelmente deve estar imaginando: No que isso pode ser usado? Bem, existem casos onde é necessário realizar um processo ou uma conta com um resultado anterior da sequência. Em Universidades, faculdades e cursos de programação um algoritmo muito pedido é a famosa sequência de Fibonacci. Essa sequência consiste em o 1o e o 2o termos são 1, e os termos seguintes são a soma dos dois termos anteriores. Ou seja, o 3o termo é a soma de 1+1 que é 2; o 4o termo é a soma de 1+2 que é 3; o 5o termo é a soma de 2+3 que é 5...

Isso resulta em : 1 - 1 - 2 - 3 - 5 - 8 - 13 - 21 - 34 - 55 - 89 ...

Para fazer a conta acima usaremos uma função que chamaremos de fibonacci, que tem o código adaptado do livro original de Dennis Ritchie & Ken Thompson.

#include <iostream>
#include <cstdlib>
using namespace std;

double fibonacci (int t);

int main (void){
    int termo;
    double fibo;
    cout <<"Digite o termo de fibonacci que deseja saber: ";
    cin >> termo;
    cin.ignore ();
    if (termo==0){
        cout<<"Nao existe termo 0!\n\n";
        main();
    }
    cout <<"\nAguarde! Processando...\n\n";
    fibo=fibonacci (termo-1);
    cout <<"O "<<termo<<"o. termo da sequencia de Fibonacci e "<<fibo<<"\n\n";
    system ("pause");
    return EXIT_SUCCESS;
}

double fibonacci (int t){
    if (t==0 || t==1)
        return 1;
    else
        return fibonacci (t-1)+fibonacci (t-2);
}
Faça o Download deste Código

Como podemos ver, esse algoritmo é bem simples. Ele tem uma entrada de dado que é o termo que queremos achar. Esse termo é passado como parâmetro para a função fibonacci. Quem faz toda a conta é a função.

Mas toda facilidade tem seu custo. Apesar de nosso algoritmo estar curto, toda vez que chamamos uma função leva um certo tempo para ser processada. No exemplo acima podemos perceber isso bem, pois, dependendo do termo que digitamos, levará um tempo maior para ser processado o resultado. Isso acontece porque a partir do termo 3 a mesma função é chamada três vezes e isso aumenta exponencialmente. Se passarmos o termo 45, por exemplo, a mesma função será chamada algumas centenas de vezes. Dependendo da configuração do computador que está executando, isso pode levar pelo menos 3 minutos até que se chegue a um resultado.

Então, a recursividade deve ser usada com cautela. Às vezes, um algoritmo um pouco mais complexo que usa um pouco mais de variáveis pode ser necessário para que se tenha um desempenho melhor.

Creative Commons License
Autor: Denys William Xavier
Este artigo está sob Licença Creative Commons.

Faça o download da versão em PDF Indique nosso site Gostou?
Indique nosso site!
Este artigo foi
lido 63699 vezes
Bookmark e Compartilhe

Páginas Relacionadas

Enquete
O Google Chrome OS irá desbancar o Microsoft Windows 7?
» ProgramaçãoAlgorítmo | C/C++ | Java

» WebHTML/XHTML | JavaScript | PHP

» Sistema OperacionalComandos de DOS | Windows | Linux | Mac/BSD

» OfficeWord/Wirter | Excel/Calc

» Áreas do SiteDownloads | Fórum | Blog