2010-03-11 22 views
0

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

+0

ressemble devoirs. S'il vous plaît mettez cette balise si elle est vraie – Andrey

+0

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) + ... –

Répondre

1

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.

+0

Voulez-vous dire 'helper (x - 1, acc * x)'? 'factorial', comme vous l'avez défini, ne prend qu'un argument. – Tim

+0

Je l'ai fait, merci. J'ai décidé de faire de l'aide une aide au lieu de la fonction réelle à mi-chemin et j'ai oublié de finir de la réparer. – zellio

0

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