séquence avec et sans récursivité
-
19-09-2019 - |
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
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