Flux rss
Rechercher : dans
Par :

Langage C / Fonction récursive

human, le samedi 14 décembre 2002 à 00:07:47 
 Signaler ce message aux modérateurs

Bonjour à tous,

J'ai un petit ennui avec une fonction récursive. Celle-ci fait appel à elle même un certain nombre de fois et doit s'arrêter lorsque certaines conditions sont vérifiées. Et pour arrêter l'exécution d'une fonction, je ne connais que 2 méthodes : return et exit(0)

L'ennui c'est que dans ces deux cas mon programme s'arrête (avec retour du prompt sous le shell quand j'utilise exit(0)) mais il n'exécute pas ce qu'il doit exécuter après cette fonction !!

Vous avez une autre méthode pour arrêter l'exécution d'une fonction (récursive) et poursuivre les différentes procédures du main ??

Merci de vos réponses

1

brj, le samedi 14 décembre 2002 à 12:15:12
  • +1

Ben, on utilise return et pas autre choses une fois return rencontrer tu quite la fonction en cours pour retourner a la fonction qui la appele(la meme dans les cas recursif).

exit c pour quiter le prog donc normal que tu t retrouve sous le shell.
Qu c passe t'il avec return?

Répondre à brj

2

Human, le samedi 14 décembre 2002 à 14:17:23
  • +1

Le return arrête le programme (i.e. celui-ci ne fait plus rien) et le prompt ne réapparait pas (je dois faire ctrl+c).

Je pensais qu'il y aurait peut-être une instruction permettant de quitter la fonction et de niquer tous les appels récursifs précédents...

Répondre à Human

3

brj, le samedi 14 décembre 2002 à 15:18:22

Non je pense que si tu recupere pas la main c une boucle infini, certain return ne doivent pas etre execute ta pas un peu de code parce que comme sa pour t'aider c pas evident!!

Répondre à brj

4

teebo, le lundi 16 décembre 2002 à 12:17:43
  • +1

Tu ne peux pas "niquer" tous les appels recursifs, a moins de cracher ton programme, ca revient a dire que tu veux empecher le retour a la fonction appelante...

°,°
\_/

Répondre à teebo

5

Belhauss, le dimanche 24 décembre 2006 à 15:02:18

Héhé ta esseyer break; mai elle fau etre conditioner par un if() si nn elle va sortir tt le temps

Répondre à Belhauss

6

amine, le mercredi 28 mars 2007 à 14:02:14

J'ai pas compris c'koi la fonction récursive en language c

Répondre à amine

7

Char Snipeur, le mercredi 28 mars 2007 à 14:58:14
  • +1

Le mieux c'est un exemple :
long int factorielle(long int a)
{
if (a==0) return 1;
return a*factorielle(a-1);
}
ici, factorielle est une fonction récursive. Salutation ! Quand on sait pas, on touche pas !JBT
Char Snipeur

Répondre à Char Snipeur

8

rachelsena2@yahoo.fr, le lundi 31 décembre 2007 à 01:55:24

Salut

Répondre à rachelsena2@yahoo.fr

9

Doctor C, le lundi 31 décembre 2007 à 04:05:23
  • +1

Human,

si tu veux sauter par-dessus tous les appels récursifs de ta fonction, c'est que tu n'as pas compris l'essence même d'une fonction récursive. Si ta fonction récursive était faite correctement, la récursivité de ta fonction se chargerais naturellement de terminer chacune des fonctions récursives déjà déclenchées.

Si tu pouvais mettre ta fonction récursive, ou un fragment de cette dernière, ça pourrait nous aider à solutionner ton problème.

Echo "Lima Mike Alfa";

Répondre à Doctor C

10

curtis, le mercredi 23 janvier 2008 à 23:33:38

Hey Human!! si tu nous ecris ce que ta fonction doit fair , alors la on pourra t aider
tout depend de ce quel va retourné (un booleen, ou un element (un float ou un integer) ou autre )
car ya des fonction recursive qui utilise une pile cachée
comme la fct de Char Snipeur: factorielle

Répondre à curtis

11

SSS1, le dimanche 30 mars 2008 à 01:22:18

G un petit exercice et svp si vous pouvez me donner la reponse
exercice:
ecrire une fonction non recursive qui calcule et retourne la factorielle de l'entier passe en argument
ecrire une autre fonction recursive qui calcule et retourne la factorielle de l'entier passe en argument
j'attend vos reponses
merci

Répondre à SSS1

12

SSS1, le dimanche 30 mars 2008 à 01:37:38
  • +3

Svp j'ai besoin d'une reponse tres vite c urgen je passe bientot un exam

Répondre à SSS1

13

sirhowarddean, le dimanche 30 mars 2008 à 03:36:36
  • +1

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

/*Realise par Sir Howard*/

int fact1(int nbr){
int f = 1;
while (nbr > 0){
f = f * nbr;
nbr--;
}
return f;
}





int fact2(int nbr){
if (nbr == 1)
return 1;
else
return (nbr * fact2(nbr - 1));
}




int main(){
int f;
do{
printf("donner le nombre positif dont on doit calculer le factoriel ");
scanf("%i",&f);
}
while (f <= 0);
printf("la factorielle de %i vaut %i\n",f,fact1(f));

getchar();
system("PAUSE");
return 0;
}

Répondre à sirhowarddean

14

SSS1, le lundi 31 mars 2008 à 00:41:30

Merci bq pour ton aide
je veux vous poser quelques questions
ds la deuxieme fonction fact2 ds la derniere ligne return (nbr*FACT1 OU FACT2???????)

Répondre à SSS1

15

SSS1, le lundi 31 mars 2008 à 00:49:32
  • +1

Svp ds la fonction fact1
on peux aussi utiliser la boucle for n'est ce pas?


int fact1(int nbr)
{ int f=1;
for (i=0;i<nbr;i++)
f=f*(nbr-i);
return f;
}
svp c just ou non j'ai besoin de vos reponses merci

Répondre à SSS1

16

SSS1, le lundi 31 mars 2008 à 00:51:57

Et si j' ai bien compris qu'une fonction recursive consiste a introduire ou faire appel a une autre fonction ds la 1ere
est ce que g bien compris?

Répondre à SSS1

17

Char Snipeur, le lundi 31 mars 2008 à 09:05:08

1 et 3- oui, c'est bien fact2, récurssive, veux dire que tu rappel la même fonction.
2- : dans fact1, on peut aussi tuiliser une boucle for en effet, ton exemple est bon, mais tu peux aussi faire:

int f=nbr;for(int i=nbr-1;i>1;i--)f=f*i;
Salutation ! avant je croyais, maintenant je suis fixé.Jésus Christ
Char Snipeur

Répondre à Char Snipeur

18

 sirhowarddean, le lundi 31 mars 2008 à 21:43:37
  • +1

Oui en fait dans fact2(nbr) on appelle encore la fonction fact2(nbr - 1) pour faire le meme traitement avec (nbr - 1) ainsi de suite mais il doit y avoir une condition d arret a l appel de cette fonction sinon ce serait infinie alors.Donc toute fonction recursive a besoin d une condition d arret.Et dans fact2 la condition d arret c est lorsque nbr == 1.
exemple fact2(4).


1- fact2(4) = 4 * fact2(3);
2- fact2(3) = 3 * fact2(2);
3- fact2(2) = 2 * fact2(1);
fact2(1) returne 1 alors :

3- fact2(2) = 2 * 1 = 2;
2- fact2(3) = 3 * 2 = 6;
1- fact2(4) = 4 * 6 = 24;


d ou factorielle 4 vaut bien 24;

Répondre à sirhowarddean
Caractéristiques du langage C Le fichier source Le fichier source d'un programme écrit en langage C est un simple fichier texte dont l'extension est par convention .c. Note d'un visiteur (J.Grondin) : L'extension est en minuscules. Le .C (majuscule) est interprété par... www.commentcamarche.net/contents/c/ccarac.php3
Langage C++ - Les pointeurs Comme en langage C, le langage C++ permet d'utiliser des pointeurs pour manipuler des données, mais il introduit aussi le concept de référence, très pratique pour permettre la modification d'une donnée passée en paramètre d'une fonction. Définition... www.commentcamarche.net/contents/cpp/cpppoint.php3
Langage C++ - Les fonctions La notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du... www.commentcamarche.net/contents/cpp/cppfonc.php3
Strtok en langage cslt, je veux savoir qu'est ce qu'elle fait la fonction strtok en langage c , j'ai chercher mais j'ai pas bien compris son fonctionemnt. et merci www.commentcamarche.net/forum/affich-6991168-strtok-en-langage-c
Exec en langage C (Résolu)Bonjour à tous. J'écris un programme en langage C permettant de créer un fichier de config (pour MRTG). Pour cela je dois utiliser la primitive "exec", la commande que je souhaite lancer ressemble à : snmpgetnext -c community IPadress OID. Comment "... www.commentcamarche.net/forum/affich-1623603-exec-en-langage-c
Petit programme en langage C (Résolu)Bonjour, Etantdonné débutant en langage C, permettez moi S.V.P de vous adresser mon petit probléme que je n'arrive à comprendre la réponse: l'ennoncé de l'exercie: Écrire une fonction qui ne renvoie aucune valeur et qui détermine la valeur maximale et... www.commentcamarche.net/forum/affich-2811312-petit-programme-en-langage-c
Langage C - Les fonctionsLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du... www.commentcamarche.net/contents/c/cfonc.php3
Langage C - Les variablesLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage C sont typées, c'est-à-dire que les données contenues dans... www.commentcamarche.net/contents/c/cvar.php3
Les classes en langage C++La notion d'objet Le langage C est un langage procédural, c'est-à-dire que c'est un langage permettant de définir des données grâce à des variables, et des traitements grâce aux fonctions. L'apport principal du langage C++ par rapport au langage C... www.commentcamarche.net/contents/cpp/cppclass.php3