bonjour
je cherche a programmer une fonction qui a pour role de caluculer factoriel de n mais cette fonction est
particuliere par ex pour n=7, elle fera
1*3*5*7 et pour n=4 elle fera 2*4
c est en C++ si qqun peut m aider
merci Dan
Version imprimable
bonjour
je cherche a programmer une fonction qui a pour role de caluculer factoriel de n mais cette fonction est
particuliere par ex pour n=7, elle fera
1*3*5*7 et pour n=4 elle fera 2*4
c est en C++ si qqun peut m aider
merci Dan
Ce n'est donc pas la fonction factorielle de n si tu ne fais pas n*n-1*n-2..*2*1
Pour qu'on puisse aider explique nous comment tu sais quel multiplication tu dois faire
voila la fonction qui faut que je calcule est :
n!! = pour des nombres paires 2*4*6*8*........*n
= pour des nombres impaires 1*3*5*7*.....*n
voici ce que j ai fait :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 #include <iostream> using namespace std; int dfac (int &n){ int fac=1, i; if (n%2==0){ for (i=0;i<=n;i++) fac=fac*n; n=n*2; } else { for (i=0;i<n;i++) fac=fac*n; n=n-2; } return fac; } int main(){ int n; cout << "Entre une veleur n dont tu veux calculer n!!:" << endl; cin >> n; int dfac (int &n); cout << n << "!!= " << dfac (n) << endl; return 0; } ca ne fonctionne pas expliquez moi svp mes erreurs en rouge merci Dan
Perso je ferai un truc du genre .. essais et tiens moi au courantCode:
1
2
3
4
5
6
7
8
9
10
11
12
13 int dfac (int &n) { int fac=1, i; if (n%2==0) // alors ton nombre est pair { for (i=2;i<=n;i+=2) // on commence a 2 .. car si on commence a 0 .. 0*n'importe quoi egal 0 fac=fac*n; } else { // le nombre est imair for (i=1;i<=n;i+=2) fac=fac*n; }
tu peux m explique ce qui ne vas pas chez moi ?
pourquoi tu mets & quand du declare la fonction a la variable ?
Merci
Pas besoin de if si tu pars de n... (attention quand même aux conditions aux limites -- pascompliqué pour autant)
(Prendre le paramètre par référence n'a aucun sens)
(Déclarer dfac dans le main() ne sert à rien. Il est déjà défini, contente-toi de l'utiliser)
Les & ne sont pas du tout necessaire ici .. tu peux les enlever !
L'appel a la fonction se ferait ainsi :
L'entete de la fonction seraitCode:
1
2 dfac (n);
Les & sont a utiliser avec precaution ! car c'est pour passer l'adresse memoire .. donc pour des int .. autant les passes directement !Code:
1
2 int dfac (int n)
Et pour le reste c'es comme je te l'ai mis avant !
j'ai pratiquement rien change .. sauf que au lieu de faire i++ dans le for .. j'ai fais i+=2
Ce qui veut dire qu'on increment i de 2 a chaque passage dans la boucle (c'est bien ce qu'on veut .. avoir que les nombres pairs ou que les nombre impair)
Bonjour,
j'ai pas tout lu, mais pourquoi pas une fonction récursive ?
si mes souvenirs sont bons, c'est pas le plus efficace en temps de calcul, mais c'est facile à programmer dans le cas présent.
http://membres.lycos.fr/bigboomshaka...ar-gif-311.gif Enjoy yourself !
non ?
je pensais à ça
Code:
1
2
3
4
5
6
7
8 unsigned int f(unsigned int n) { if (n<=1) return 1; unsigned int m = (n-2)>0 ? n-2 : 1; return n*f(m); }
http://membres.lycos.fr/bigboomshaka...ar-gif-311.gif Enjoy yourself !
Le deuxième test est inutile car englobé par le premier.
correct.
Code:
1
2
3
4
5
6
7 unsigned int f(unsigned int n) { if (n<=1) return 1; return n*f(n-2); }
http://membres.lycos.fr/bigboomshaka...ar-gif-311.gif Enjoy yourself !
Si on veut aider le compilateur à optimiser la récursivité, il peut être utile de la transformer en récursivité terminale :
Code:
1
2
3
4
5
6
7
8
9
10
11
12 unsigned int f(unsigned int n) { return f1 (n, 1); } unsigned int f1(unsigned int n, unsigned int a) { if (n<=1) return a; return f1(n-2, n*a); }
:D tu peux m'expliquer ?
http://membres.lycos.fr/bigboomshaka...ar-gif-311.gif Enjoy yourself !
Bonjour,
je voulais juste dire que la fonction décrite par gruni1 n'est pas une factorielle simple mais une multi-factorielle. Plus précisément, dans le cas de gruni1, il s'agit d'une multi-factorielle sur les nombres paires ou impaires.
Factorielle simple : n! = (n)(n-1)(n-2)(n-3).....(1)
Multi-Factorielle paire : n!! = (n)(n-2)(n-4).....(2) avec n paire
Multi-Factorielle impaire : n!! = (n)(n-2)(n-4).....(1) avec n impaire
(notez bien le double emploi du point d'exclamation).
Voici un lien vers un site qui détaille les multi-factorielles et primorielle (factorielle de nombres premiers).
http://membres.lycos.fr/villemingera...r/primorie.htm
Voila.
Flo.
Par exempe : http://cermics.enpc.fr/polys/info1/main/node22.htmlCitation:
Envoyé par bigboomshakala
merci :wink:Citation:
Envoyé par JolyLoic
http://membres.lycos.fr/bigboomshaka...ar-gif-311.gif Enjoy yourself !