Erreur de segmentation fonction reccursive
Résolu
rocksider
Messages postés
106
Date d'inscription
Statut
Membre
Dernière intervention
-
rocksider Messages postés 106 Date d'inscription Statut Membre Dernière intervention -
rocksider Messages postés 106 Date d'inscription Statut Membre Dernière intervention -
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 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Erreur 4101 france tv - Forum Lecteurs et supports vidéo
- J'aime par erreur facebook notification - Forum Facebook
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.