Probléme de Récursivité

GKA Messages postés 341 Date d'inscription   Statut Membre Dernière intervention   -  
 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 !

5 réponses

amie
 
salut
postes ton essaye meme si incomplé ou bien
ce que tu a pensé
cdlt
0
GKA Messages postés 341 Date d'inscription   Statut Membre Dernière intervention   77
 
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
0
Droopy_ Messages postés 248 Date d'inscription   Statut Membre Dernière intervention   25
 
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.
0
thomas87b Messages postés 275 Date d'inscription   Statut Membre Dernière intervention   64
 
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
0
Droopy_ Messages postés 248 Date d'inscription   Statut Membre Dernière intervention   25
 
C'est pas récursif, ça !!!
0
GKA Messages postés 341 Date d'inscription   Statut Membre Dernière intervention   77
 
Merci thomas87b mais dans un traitement recursif on doit pas utiliser des boucle (tant que, répéter jusqu'a ou pour i faire ...)
0
thomas87b Messages postés 275 Date d'inscription   Statut Membre Dernière intervention   64
 
Oui, récursivité, j'ai pensé boucle.
Désolé, je me suis rendu compte de mon erreur en lisant le message de Droopy_.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
amie
 
bonjour GKA
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
0
GKA Messages postés 341 Date d'inscription   Statut Membre Dernière intervention   77
 
Merci bien amie la solution etait parfaite, c'est ca le vrai traitement récursif
0
amie > GKA Messages postés 341 Date d'inscription   Statut Membre Dernière intervention  
 
de rien GKA
si t'a pas compris quelque chose poses tes questions sinon il faut mettre statut:resolu
cordialement
0