1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

ajuda a tirar dúvida....

Discussão em 'Programação' iniciada por _[D]4rk$h0t_, 5 de Maio de 2008. (Respostas: 4; Visualizações: 485)

  1. _[D]4rk$h0t_

    _[D]4rk$h0t_ Power Member

    Olá a todos eu estou no 10º ano na Cristovao Colombo a tirar um curso de programação e até agora já dei Algoritmia e agora tou dando "C" e a minha situação é a seguinte desenrasco-me bem com strings, arrays, funções mas hoje na aula demos algo novo "RECURSIVIDADE"e o prof para nos dar um exemplo deu-nos o seguinte exercicio:

    Dado o seguinte programa:
    #include<stdio.h>

    intmain() {
    doublex = 0.0;
    intn = 0;
    for(x = 2.0 ; x<= 3.0; x += 1)
    for(n = 0 ; n<5 ; n++)
    printf("Res: %.2f\n", power(x,n));
    }
    Este devolve o seguinte:

    Res: 1.00
    Res: 2.00
    Res: 4.00
    Res: 8.00
    Res: 16.00
    Res: 1.00
    Res: 3.00
    Res: 9.00
    Res: 27.00
    Res: 81.00
    Prima qualquer tecla para continuar...

    Power é uma função recursiva que devolve o quadrado de um número. Cria esta função.

    E a turma já criou a função(á sorte// não sabemos como) que passo a citar:

    #include<stdio.h>

    float power(double x, intn)
    {
    if (n ==0 )
    return 1;
    else
    return power(x, n-1)*x;
    }
    int main()
    {
    double x = 0.0;
    int n = 0;
    for(x = 2.0 ; x<= 3.0; x += 1)
    for(n = 0 ; n<5 ; n++)
    printf("Res: %.2f\n", power(x,n));
    }

    A 1ª parte percebi ele verifica se (n ==0 ) return 1; até aqui tudo bem mas o pior é na segunda parte pois x = 2 e n = 1 ele verifica e vai para o else e aí pelo que percebi(do que o professor disse) ele faz (n-1)*x ou (1-1)*2 que fica em 0*2 que dá 0 agora pergunto-me como é que isto funciona.. espero ajuda..

    Desde já agrdeço pela vossa paciência e peço desculpa por terem de ler tanto texto xD.

    Cumps.
     
  2. Baderous

    Baderous Banido

    Pegando num exemplo simples:

    2^3 = 2*(2^2) = 2*(2*(2^1)) = 2*2*2 = 8

    Adaptando ao teu programa:

    power(x,n) = power(2,3) = power(2,3-1)*2 = power(2,2)*2 = power(2,2-1)*2*2 = power(2,1)*2*2 = power(2,1-1)*2*2*2 = power(2,0)*2*2*2 = 1*2*2*2 = 2^3 = 8.
     
  3. _[D]4rk$h0t_

    _[D]4rk$h0t_ Power Member

    tks pelo exemplo realmente fiquei a perceber melhor.. e verfiquei a minha teoria que ele faz sempre a conta com o (x, y) valor neste caso ainda assim gostava de ver mais explicações pois essa parte de tipo ele na sintaxe só tem return power(x, n-1)*x; e no teu exemplo power(2,1-1)*2*2*2 ele tem 3 vezes a multiplicar por 2 quando no entanto.. so tem uma vez *x essa parte na sei porque mas na me entra na cabeça -.- mas tks pelo exemplo :)
     
  4. Baderous

    Baderous Banido

    Oh homem, aquilo tem a multiplicar 3 vezes porque naquela altura já está na 3ª invocação recursiva da função power.

    power(2,3) = invocação da função power com os argumentos 2 e 3
    = power(2,3-1)*2 = 1ª invocação recursiva da função power já com os argumentos alterados
    = power(2,2-1)*2*2 = 2ª invocação recursiva da função power já com os argumentos alterados
    = power(2,1-1)*2*2*2 = 3ª invocação recursiva da função power já com os argumentos alterados
    = power(2,0)*2*2*2 = última invocação recursiva da função power já com os argumentos alterados
    = 1*2*2*2 = 2^3 = 8. cálculo do resultado final
     
  5. _[D]4rk$h0t_

    _[D]4rk$h0t_ Power Member

    Certo.. Entao se eu pusesse:
    = power(2,1-1)*2
    = power(2,0)*2=
    =1*2 = 2

    tks ;)
     

Partilhar esta Página