Probléme de Récursivité
GKA
Messages postés
341
Date d'inscription
Statut
Membre
Dernière intervention
-
amie -
amie -
Salut les développeurs, j'ai un p'tit probléme (en PASCAL) de récursivité que je n'arrive pas à le résoudre, l'énoncé est :
Rechercher le nombre de fois qu'un caractére apparait dans une chaine en utilisant un traitement récursif.
Et merci d'avanc !
Rechercher le nombre de fois qu'un caractére apparait dans une chaine en utilisant un traitement récursif.
Et merci d'avanc !
5 réponses
Hey mec, si j'avais une simple idée je ne poste pas ce sujet, mais je ss vraiment incapable de trouver la solution sauf en l'algorithme classique (sans récursivité). On plus les professeurs nous disent que pour trouver une solution récursive il faut chercher l'élément récursif (qui diminue ou augmente), exprimer la solution dans le cas général qui contient des appels récursifs et aprés trouver les conditions d'arrêt pour que le programme ne tourne pas dans une boucle fermée
On va te mettre sur la voie.
Le résultat que tu cherches, c'est :
Si le premier caractère de ta chaine est le caractère que tu cherches,
tu fais 1 + le nombre de caractères dans le reste de la chaine,
sinon, c'est le nombre de caractères dans le reste de la chaine.
Tu crées donc une fonction qui va s'appeler elle-même (récursive) avec une chaine de plus en plus petite.
quand la chaine est vide, c'est fini.
Le résultat que tu cherches, c'est :
Si le premier caractère de ta chaine est le caractère que tu cherches,
tu fais 1 + le nombre de caractères dans le reste de la chaine,
sinon, c'est le nombre de caractères dans le reste de la chaine.
Tu crées donc une fonction qui va s'appeler elle-même (récursive) avec une chaine de plus en plus petite.
quand la chaine est vide, c'est fini.
Je ne connais pas le Pascal, mais voici un code en Python que tu pourrais adapter qui fait ce que tu demandes :
chn=raw_input("Chaine : ") #Demande a l'utilisateur d'entrer la chaine a analyser et l'enregistre dans chn ca=" " #Defini de caractere a compter (ici un espace) n=0 #Initialise le compteur nn=0 #Initialise la variable de recursivite while nn<=len(chn)-1: #Tant que nn<(nombre de caracteres de la chaine)-1 (Le premier caractere etant le numero 0) if chn[nn]==ca: #Si le caractere nn est celui enregistre dans ca n=n+1 #On ajoute 1 au compteur nn=nn+1 #On ajoute 1 au compteur de recursivite print n #On affiche le nombre de fois que le caractere apparait dans la chaine
Oui, récursivité, j'ai pensé boucle.
Désolé, je me suis rendu compte de mon erreur en lisant le message de Droopy_.
Désolé, je me suis rendu compte de mon erreur en lisant le message de Droopy_.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
bonjour GKA
je pense que ce programme repend à ta question
cordialement
je pense que ce programme repend à ta question
program recurs; uses Strings,crt; var chaine:string; c:char; x,a:integer; function app_car(c:char;var chaine:string):integer; var car:char; long:integer; begin long:=length(chaine); car:=chaine[long]; chaine:=copy(chaine,1,length(chaine)-1); if long=0 then begin app_car:=a; exit; end; if car=c then a:=a+1; app_car:=app_car(c,chaine); end; begin clrscr; write('entrez la chaine: '); readln(chaine); write('entrez le caractere que vous voulez: '); readln(c); a:=0; x:=app_car(c,chaine); write('le nombre d"apparition du caractere ',c,' dans votre chaine est: ',x); readkey; end.
cordialement