Utilisation de la fonction main en récursif

floriandevelop Messages postés 8 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 4 janvier 2008 - 13 sept. 2005 à 22:12
Alcantornet Messages postés 89 Date d'inscription mardi 8 février 2005 Statut Membre Dernière intervention 14 novembre 2007 - 16 sept. 2005 à 17:02
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

floriandevelop Messages postés 8 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 4 janvier 2008 1
13 sept. 2005 à 23:56
c pas du tout crade, et la boucle for ne m'aide pas trop pour la récursivité!!!
1
floriandevelop Messages postés 8 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 4 janvier 2008 1
14 sept. 2005 à 09:06
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....
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
14 sept. 2005 à 09:40
Très tordu comme raisonement.

Ou est le probleme exactement ? Sur quoi bloques tu ?
0
whikie Messages postés 99 Date d'inscription vendredi 24 juin 2005 Statut Membre Dernière intervention 17 septembre 2005
14 sept. 2005 à 09:55
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 ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
14 sept. 2005 à 10:08
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;<
0
whikie Messages postés 99 Date d'inscription vendredi 24 juin 2005 Statut Membre Dernière intervention 17 septembre 2005
14 sept. 2005 à 10:17
ok merci
0
floriandevelop Messages postés 8 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 4 janvier 2008 1
14 sept. 2005 à 10:55
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??
0
bweps Messages postés 17 Date d'inscription dimanche 12 décembre 2004 Statut Membre Dernière intervention 10 mai 2007
14 sept. 2005 à 14:54
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 ?...
0
bweps Messages postés 17 Date d'inscription dimanche 12 décembre 2004 Statut Membre Dernière intervention 10 mai 2007
14 sept. 2005 à 15:08
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
0
Alcantornet Messages postés 89 Date d'inscription mardi 8 février 2005 Statut Membre Dernière intervention 14 novembre 2007
16 sept. 2005 à 17:02
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.
0
vinc1008881 Messages postés 257 Date d'inscription dimanche 22 août 2004 Statut Membre Dernière intervention 29 septembre 2010 3
13 sept. 2005 à 23:05
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 !
-1
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
14 sept. 2005 à 07:43
moi j'trouve crade d'utiliser "main" pour le nom de la fonction.
if(!Meilleur("Joky")) return ERREUR;
-1
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
14 sept. 2005 à 07:58
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...
-1
Rejoignez-nous