Probléme de Récursivité

Fermé
GKA Messages postés 341 Date d'inscription vendredi 17 août 2007 Statut Membre Dernière intervention 3 août 2012 - 20 nov. 2008 à 22:07
 amie - 21 nov. 2008 à 22:56
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

salut
postes ton essaye meme si incomplé ou bien
ce que tu a pensé
cdlt
0
GKA Messages postés 341 Date d'inscription vendredi 17 août 2007 Statut Membre Dernière intervention 3 août 2012 77
20 nov. 2008 à 22:23
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 dimanche 16 novembre 2008 Statut Membre Dernière intervention 17 janvier 2009 25
20 nov. 2008 à 22:48
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 mardi 2 septembre 2008 Statut Membre Dernière intervention 23 octobre 2020 64
20 nov. 2008 à 22:49
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 dimanche 16 novembre 2008 Statut Membre Dernière intervention 17 janvier 2009 25
20 nov. 2008 à 22:51
C'est pas récursif, ça !!!
0
GKA Messages postés 341 Date d'inscription vendredi 17 août 2007 Statut Membre Dernière intervention 3 août 2012 77
20 nov. 2008 à 22:52
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 mardi 2 septembre 2008 Statut Membre Dernière intervention 23 octobre 2020 64
20 nov. 2008 à 22:54
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
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 vendredi 17 août 2007 Statut Membre Dernière intervention 3 août 2012 77
21 nov. 2008 à 21:15
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 vendredi 17 août 2007 Statut Membre Dernière intervention 3 août 2012
21 nov. 2008 à 22:56
de rien GKA
si t'a pas compris quelque chose poses tes questions sinon il faut mettre statut:resolu
cordialement
0