Langage C / Fonction récursive
Résolu/Fermé
A voir également:
- Langage C / Fonction récursive
- Fonction si et - Guide
- Langage ascii - Guide
- Langage binaire - Guide
- Fonction moyenne excel - Guide
- Pascal langage - Télécharger - Édition & Programmation
16 réponses
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
28 mars 2007 à 14:58
28 mars 2007 à 14:58
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.
long int factorielle(long int a)
{
if (a==0) return 1;
return a*factorielle(a-1);
}
ici, factorielle est une fonction récursive.
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?
exit c pour quiter le prog donc normal que tu t retrouve sous le shell.
Qu c passe t'il avec return?
teebo
Messages postés
33491
Date d'inscription
jeudi 14 octobre 2004
Statut
Modérateur
Dernière intervention
24 février 2011
1 793
16 déc. 2002 à 12:17
16 déc. 2002 à 12:17
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...
°,°
\_/
°,°
\_/
sirhowarddean
Messages postés
2
Date d'inscription
dimanche 30 mars 2008
Statut
Membre
Dernière intervention
31 mars 2008
5
31 mars 2008 à 21:43
31 mars 2008 à 21:43
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;
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;
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
sirhowarddean
Messages postés
2
Date d'inscription
dimanche 30 mars 2008
Statut
Membre
Dernière intervention
31 mars 2008
5
30 mars 2008 à 03:36
30 mars 2008 à 03:36
#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;
}
#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;
}
SSS1
Messages postés
5
Date d'inscription
dimanche 30 mars 2008
Statut
Membre
Dernière intervention
31 mars 2008
31 mars 2008 à 00:41
31 mars 2008 à 00:41
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???????)
je veux vous poser quelques questions
ds la deuxieme fonction fact2 ds la derniere ligne return (nbr*FACT1 OU FACT2???????)
SSS1
Messages postés
5
Date d'inscription
dimanche 30 mars 2008
Statut
Membre
Dernière intervention
31 mars 2008
31 mars 2008 à 00:49
31 mars 2008 à 00:49
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
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
SSS1
Messages postés
5
Date d'inscription
dimanche 30 mars 2008
Statut
Membre
Dernière intervention
31 mars 2008
31 mars 2008 à 00:51
31 mars 2008 à 00:51
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?
est ce que g bien compris?
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
31 mars 2008 à 09:05
31 mars 2008 à 09:05
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:
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;
Doctor C
Messages postés
627
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
19 février 2016
398
31 déc. 2007 à 04:05
31 déc. 2007 à 04:05
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.
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.
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...
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...
SSS1
Messages postés
5
Date d'inscription
dimanche 30 mars 2008
Statut
Membre
Dernière intervention
31 mars 2008
30 mars 2008 à 01:22
30 mars 2008 à 01:22
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
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
SSS1
Messages postés
5
Date d'inscription
dimanche 30 mars 2008
Statut
Membre
Dernière intervention
31 mars 2008
30 mars 2008 à 01:37
30 mars 2008 à 01:37
svp j'ai besoin d'une reponse tres vite c urgen je passe bientot un exam
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!!
j'ai pas compris c'koi la fonction récursive en language c
ikram00
Messages postés
16
Date d'inscription
lundi 5 mars 2012
Statut
Membre
Dernière intervention
25 mai 2012
6 mars 2012 à 22:01
6 mars 2012 à 22:01
c'est une fonction qui fait appel à elle même un certain nombre de fois et doit s'arrêter lorsque certaines conditions sont vérifiées.
6 mars 2012 à 21:54
??
15 sept. 2013 à 03:16
16 sept. 2013 à 14:16
11 mars 2016 à 08:06
11 mars 2016 à 11:05