Erreur de segmentation fonction reccursive
Résolu
rocksider
Messages postés
107
Statut
Membre
-
rocksider Messages postés 107 Statut Membre -
rocksider Messages postés 107 Statut Membre -
Bonjour,
J'ai programmé une fonction réccursive qui doit comparer le nombre d'occurence de deux lettres et retourné celui qui est present le plus, mais apres compilation et execution le code me retourne Erreur de segmentation, or je vois pas d'ou provenir ce probleme , voilà le code:
Help:è
J'ai programmé une fonction réccursive qui doit comparer le nombre d'occurence de deux lettres et retourné celui qui est present le plus, mais apres compilation et execution le code me retourne Erreur de segmentation, or je vois pas d'ou provenir ce probleme , voilà le code:
#include<stdio.h>
int nbrle(char mot[],char lettre1,char lettre2,int i,int nl1,int nl2)
{
if(mot[i]!='\0')
if(mot[i]==lettre1)
return nbrle(mot,lettre1,lettre2,i++,nl1++,nl2);
else if(mot[i]==lettre2)
return nbrle(mot,lettre1,lettre2,i++,nl1,nl2++);
else
return nbrle(mot,lettre1,lettre2,i++,nl1,nl2);
else
if(nl1>nl2)
return 1;
else
return 0;
}
int main(void)
{
char c,lettre1,lettre2,chaine[20];
int resultat=0;
printf("Donner la 1er lettre: ");
scanf("%c",&lettre1);
while((c=fgetc(stdin))!='\n');
printf("Donner la 2éme lettre: ");
scanf("%c",&lettre2);
while((c=fgetc(stdin))!='\n');
printf("Donner la chaine de caractere: ");
gets(chaine);
puts(chaine);
resultat=nbrle(chaine,lettre1,lettre2,0,0,0);
if(resultat)
printf("Le nombre de %c est supérieur a celui de %c dans %s",lettre1,lettre2,chaine);
else
printf("Le nombre de %c est supérieur a celui de %c dans %s",lettre2,lettre1,chaine);
return 0;
}
Help:è
A voir également:
- Erreur de segmentation fonction reccursive
- Fonction si et - Guide
- Erreur t32 ✓ - Forum Livebox
- Erreur 0x80070643 - Accueil - Windows
- Erreur de lecture reconnecté en 3s - Forum TV & Vidéo
- Erreur 4101 france tv - Forum Lecteurs et supports vidéo
2 réponses
Salut,
A mon avis tu dépasses ta pile aà d'une récursivisité infinie.
A mon avis c'est parce que tu utilises la post-incrémentation à la place de la pré-incrémentation.
Exemple:
Quand tu fais ça c'est l'équivalent de:
En réalité ici tu as besoin de la pré-incrémentation:
=
Tu vois? Comme tu n'incrémentes pas tes nombres finalement, tu fais un appel récursif infini sur le même i et
la pile d'appels de fonctions finit par saturer.
Et il faudra faire ces pré-incrémentations sur tes 3 return.
A mon avis tu dépasses ta pile aà d'une récursivisité infinie.
A mon avis c'est parce que tu utilises la post-incrémentation à la place de la pré-incrémentation.
Exemple:
return nbrle(mot,lettre1,lettre2,i++,nl1++,nl2);
Quand tu fais ça c'est l'équivalent de:
tmp = nbrle(mot,lettre1,lettre2,i,nl1,nl2); i = i + 1; nl1 = nl1 + 1; return tmp;
En réalité ici tu as besoin de la pré-incrémentation:
return nbrle(mot,lettre1,lettre2,++i,++nl1,nl2);
=
i = i + 1; nl1 = nl1 + 1; return nbrle(mot,lettre1,lettre2,i,nl1,nl2);
Tu vois? Comme tu n'incrémentes pas tes nombres finalement, tu fais un appel récursif infini sur le même i et
la pile d'appels de fonctions finit par saturer.
Et il faudra faire ces pré-incrémentations sur tes 3 return.