J'ai une séquence.séquence avec et sans récursion
a1 = 1 - cos(x);
ai = a1 + (-1)^(i-1) * x^(2*i-2)/(2*i-2)!
Je dois écrire ceci avec et sans récursion. Mais il a des résultats différents.
Voici mon code: http://codepaste.net/q213q6
J'ai une séquence.séquence avec et sans récursion
a1 = 1 - cos(x);
ai = a1 + (-1)^(i-1) * x^(2*i-2)/(2*i-2)!
Je dois écrire ceci avec et sans récursion. Mais il a des résultats différents.
Voici mon code: http://codepaste.net/q213q6
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 factorielle de manière récursive. Bien que ça ne fasse probablement pas beaucoup de différence en C, c'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 retour ou rappel.
Puisque vous effectuez l'arithmétique en virgule flottante. Différents moyens de mise en œuvre peuvent produire des résultats différents. Dans votre cas, je peux penser à un endroit où les pertes sont engagés
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
ressemble devoirs. S'il vous plaît mettez cette balise si elle est vraie – Andrey
Je suppose que votre séquence est destinée à converger vers zéro. Si oui, il devrait être défini comme a_i = a_ (i-1) + ... –