Probléme de Récursivité

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

  • Votes
  • Date
  • Date décroissante
  1. salut
    postes ton essaye meme si incomplé ou bien
    ce que tu a pensé
    cdlt
    1. 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
      1. 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.
    2. 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
      
      1. C'est pas récursif, ça !!!
      2. Merci thomas87b mais dans un traitement recursif on doit pas utiliser des boucle (tant que, répéter jusqu'a ou pour i faire ...)
    3. Oui, récursivité, j'ai pensé boucle.
      Désolé, je me suis rendu compte de mon erreur en lisant le message de Droopy_.
      1. 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
        1. Merci bien amie la solution etait parfaite, c'est ca le vrai traitement récursif
        2. @GKAde rien GKA
          si t'a pas compris quelque chose poses tes questions sinon il faut mettre statut:resolu
          cordialement