• Matéria: Informática
  • Autor: GunsNRose
  • Perguntado 8 anos atrás

Gente alguem me explica por favor o que e Recursividade direta e indireta em c ?Com exemplos por favor( pesquisei no google mas não achei explicando direta e indireta.)

Respostas

respondido por: jvsilvictorox7rfj
1


     A Recursividade DIRETA é quando uma sub-rotina chama ela mesma diretamente.

Exemplo:

     A Série de Fibonacci é dada por:  1, 1, 2, 3, 5, 8, 13, 21...

     Repare que cada termo é a soma dos dois anteriores...

     Então podemos dizer que  Fibonacci(n) = Fibonacci (n - 1) + Fibonacci (n-2)

Em C, teríamos:

int fibonacci(int n)

    if(n <= 2)
        return 1;
    else 
        return fibonacci(n-1) + fibonacci(n-2);
}



EXEMPLO DE USO NA 1ª IMAGEM.

Repare que na linha 6 a função chama ela mesma de forma direta.



__________________________________________________________



     A Recursividade INDIRETA é quando uma sub-rotina chama uma outra sub-rotina (ou 'n' outras) que acabam chamando a sub-rotina "original" novamente.  

     Por exemplo, a sub-rotina A chama a B, porém a B faz uso da A.  Portanto, indiretamente A chamou A, no caso, através de B.

Exemplo:

     Um exemplo super simples seria fazer a soma de um valor com um produto... 

     Imagine que você deseja realizar a expressão:  5 +  (2*3). 

     Um produto nada mais é do que uma série de somas.  2*3 =  2 + 2 + 2 = 6.  

     Para realizar essa operação a função "soma" usaria a função "produto" que por sua vez usará a função "soma" para fazer o produto de 2 por 3.



Em C então teríamos:

int soma(int a, int b)
{
    return (a + b);
}

int produto(int a, int b)
{
    int r = 0;
    for(int i=0; i<b; i++)
    r = soma(r,a);
    return r;
}



EXEMPLO DE USO NA 2ª IMAGEM.

Repare que na linha 18 a função "soma" chama a "produto" e dentro da produto temos a chama de "soma".




Anexos:

GunsNRose: Muito obrigada! Me ajudou muito!
Perguntas similares