Question

I ont une séquence.

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

Je dois écrire cela avec et sans récursivité. Mais il a un des résultats différents.
Voici mon code: http://codepaste.net/q213q6

Était-ce utile?

La solution

Je vais fonctionner en supposant que ce devoir, si je me trompe, je reviendrai et modifier ce poste ou republier.

Tout d'abord, vous devriez essayer d'écrire votre fonction factoriel d'une manière récursive de la queue. Bien qu'il ne sera probablement pas faire beaucoup de différence dans C, il est une bonne pratique.

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

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

Ensuite, vous ne voulez généralement pas mettre une boucle à l'intérieur de vos fonctions récursives, qui défaites un peu le point. Pensez à un appel récursif comme une itération avec un test et soit le retour ou le rappel.

Autres conseils

Puisque vous effectuez l'arithmétique en virgule flottante. Différentes façons de mise en œuvre peuvent produire des résultats différents. Dans votre cas, je peux penser à un endroit où les pertes sont engagées

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

est pas égal à

  47:          currC = currC * x * x;

Pour plus d'informations, http://en.wikipedia.org/wiki/Floating_point#Multiplication

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top