Probléme de Récursivité

GKA Messages postés 380 Statut Membre -  
 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 !
Configuration: Windows
Internet Explorer 8.0

5 réponses

  1. amie
     
    salut
    postes ton essaye meme si incomplé ou bien
    ce que tu a pensé
    cdlt
    0
  2. GKA Messages postés 380 Statut Membre 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
    1. Droopy_ Messages postés 252 Statut Membre 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
  3. thomas87b Messages postés 306 Statut Membre 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
    1. Droopy_ Messages postés 252 Statut Membre 25
       
      C'est pas récursif, ça !!!
      0
    2. GKA Messages postés 380 Statut Membre 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
  4. thomas87b Messages postés 306 Statut Membre 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

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