Utilisation de la fonction main en récursif

Signaler
Messages postés
8
Date d'inscription
samedi 22 janvier 2005
Statut
Membre
Dernière intervention
4 janvier 2008
-
Messages postés
89
Date d'inscription
mardi 8 février 2005
Statut
Membre
Dernière intervention
14 novembre 2007
-
Bonjour!

pour ma première question, je vais demander un truc qu'on pourra trouver tordu..!



alors voilà: comment peut-on utiliser directement la fonction main (en
c /c++) avec des appels récursifs, en l'occurence je souhaite
implémenter une fonction main qui calcule une factorielle d'un entier
passé en paramètre!!!



voici le début de mon code:



int main(int x = 3)

{

if (x = = 0) return 1;

else return x * main(x-1);

}

je lance un terminal (sous windows XP) et redirige le résultat dans un fichier texte, mais n'obtient rien du tout:



c:\main 5 > log.txt



Qqn a-t'il des conseils à me donner?



merci!

13 réponses

Messages postés
8
Date d'inscription
samedi 22 janvier 2005
Statut
Membre
Dernière intervention
4 janvier 2008
1
c pas du tout crade, et la boucle for ne m'aide pas trop pour la récursivité!!!
Messages postés
8
Date d'inscription
samedi 22 janvier 2005
Statut
Membre
Dernière intervention
4 janvier 2008
1
Bon, je vais expliquer pourquoi je veux faire cela:



Dans un cours de technique de compilation, notre professeur nous a
demandé d'utiliser le main récursivement, pour voir comment cela se
passe au niveau du compilateur j'imagine....



Donc, ça sert à rien de critiquer cette méthode, il s'agit d'un exercice!!!

j'aurais peut-être du le préciser dès le début....
Messages postés
2670
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Très tordu comme raisonement.

Ou est le probleme exactement ? Sur quoi bloques tu ?
Messages postés
99
Date d'inscription
vendredi 24 juin 2005
Statut
Membre
Dernière intervention
17 septembre 2005

Bonjour a tous


je debute dans le c++ mais si on declare :

int main(int x = 3)

au debut de la procedure x vaudra 3 a chaque fois qu'on appelera la procedure non ?
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Pauvre fonction main, elle en aura vu de toutes les couleurs :p

Si un argument est initialisé dans la déclaration de la fonction, alors c'est une valeur par défaut :o



void Fct(int x = 2)

{

printf("x : %i\n", x);

}



Lors de l'apel on peut faire Fct(); ou Fct(5);

Et on aura sur la console :

x : 2

x : 5
if(!Meilleur("Joky")) return ERREUR;<
Messages postés
99
Date d'inscription
vendredi 24 juin 2005
Statut
Membre
Dernière intervention
17 septembre 2005

ok merci
Messages postés
8
Date d'inscription
samedi 22 janvier 2005
Statut
Membre
Dernière intervention
4 janvier 2008
1
Très tordu comme raisonement.



Ou est le probleme exactement ? Sur quoi bloques tu ?



je bloque sur les point suivants:

<ol>
<li>comment lire ou interpréter le résultat? j'essaie en appelant mon
programme en ligne de commande et en redirigeant le flux sur un fichier</li>
<li>que signifie l'argument char *argv[] du main?</li>
<li>comment appeler proprement la fonction main récursivment</li>
</ol>
vous ne trouvez pas que c'est un exercice intéressant??
Messages postés
17
Date d'inscription
dimanche 12 décembre 2004
Statut
Membre
Dernière intervention
10 mai 2007

heu...
la redirection que tu effectues concerne ce qui est envoyé vers la sortie standard, non?
Vu que ton programme n'y envoie rien, ça paraît normal que ton log soit vide ?...
Messages postés
17
Date d'inscription
dimanche 12 décembre 2004
Statut
Membre
Dernière intervention
10 mai 2007

Je n'avais pas vu tes questions...


2. char *argv[] est un pointeur sur un tableau de chaînes de caractères qui sont en fait, lors du premier appel (par l'OS) les paramètres de la ligne de commande. Au pif (à vérifier), argc est le nombre de ces chaînes de caractères.

3.il suffit alors de passer en paramètre de ta fonction main
- l'argument courant (ton x courant)
- l'argument initial (le nombre dont tu dois calculer la factorielle)
Pour ça, il suffit de les convertir en chaîne de caractères et les passer en argument de ton main, en précisant grâce à argc qu'il y en a deux

1. pour envoyer le résultat sur la sortie standard, il suffit alors de distinguer un cas des autres dans ton main : celui ou l'argument courant est égal à l'argument initial. Dans ce cas, tu dois, après avoir fait le calcul (lancé la récursion), écrire le résultat obtenu au lieu d'en faire un return...

Voilà voilà. J'espère ne pas avoir dit de bêtises. Vu que c'est un exercice, je trouve que j'en ai déjà dit beaucoup...
Bon courage
Messages postés
89
Date d'inscription
mardi 8 février 2005
Statut
Membre
Dernière intervention
14 novembre 2007

c:\main 5 > log.txt



ça sert à rien de mettre > log.txt, le
> sert à mettre dans un fichier du texte qui devrait apparaitre dans
le terminal. Dans ton cas il y a de toute façon rien qui s'affiche donc
c'est inutile.



Par contre pour connaître la valeur retourner d'un programme fait ceci (tjs dans le terminal) :



c:\main 5
Lance ton programme
(appuies sur enter koi...)

echo %errorlevel% Affiche la valeur du return de ton prog.
Messages postés
257
Date d'inscription
dimanche 22 août 2004
Statut
Membre
Dernière intervention
29 septembre 2010
3
int main(int x = 3)

{

if (x = = 0) return 1;

else return x * main(x-1);

}



>>c'est vraiment tres crade tout sa , for (initialisation;condition;increment){instruction;} est netement mieux !
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
moi j'trouve crade d'utiliser "main" pour le nom de la fonction.
if(!Meilleur("Joky")) return ERREUR;
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

Bonjour,



Déja le prototype de la fonction main est int main(int argc, char *argv[]).

Tu passes en ligne de commande le nombre dont tu veux calculer la factorielle

et tu effectues tes calculs dans une fonction a part (et surtout pas de main recursif) et si tu veux le resultat dans un fichier alors fopen ...



Bonne journée,

Matt...