Pergunta

Eu tenho uma seqüência.

a1 = 1 - cos(x);
ai = a1 + (-1)^(i-1) * x^(2*i-2) / (2*i-2)!

Eu preciso escrever isso com e sem recursão. Mas tem um resultados diferentes.
Aqui está o meu código: http://codepaste.net/q213q6

Foi útil?

Solução

Eu vou operar sob a suposição de que esta é a lição de casa, se eu estiver errado eu vou voltar e editar este post ou repost.

Em primeiro lugar, você deve tentar escrever a sua função fatorial de uma maneira cauda recursiva. Embora provavelmente não vai fazer muita diferença em C, é uma boa prática.

int helper( int x, int acc ) {
    if( x == 0 ) {
        return acc;
    }
    else {
      return helper( x - 1, acc * x );
    }
}

int factorial( x ) {
  helper( x, 1 );
}

Em seguida, você geralmente não quer colocar um loop interno de suas funções recursivas, que tanto derrota o ponto. Pense em uma chamada recursiva como uma iteração com um teste e tanto de retorno ou recall.

Outras dicas

Uma vez que você está executando aritmética de ponto flutuante. Diferentes formas de implementação pode produzir resultados diferentes. No seu caso eu posso pensar em um lugar onde as perdas são incorridos

currC = pow(x, 2*i-2);

não é igual a

  47:          currC = currC * x * x;

Para obter mais informações, http://en.wikipedia.org/wiki/Floating_point#Multiplication

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top