Fonction de recurcivité

Fermé
Signaler
Messages postés
10
Date d'inscription
vendredi 30 novembre 2007
Statut
Membre
Dernière intervention
20 décembre 2007
-
Messages postés
4
Date d'inscription
jeudi 29 novembre 2007
Statut
Membre
Dernière intervention
5 décembre 2007
-
Bonjour,
salut, est ce que quelquin peut m'envoyer une fonction recursive(en turbo pascal) qui permet d'inverser une chaine de caractére

1 réponse

Messages postés
4
Date d'inscription
jeudi 29 novembre 2007
Statut
Membre
Dernière intervention
5 décembre 2007

salut bon il ya plusieure methode pour ce probleme.

Soit une chaîne de caractères; supposons qu'on veuille faire aussi bien la fonction que la procédure qui nous renvoient l'inverse de cette chaîne; la fonction admet donc un paramètre qui est la chaîne initiale (transmise par valeur), et la procédure un paramètre qui est une variable de type "string" (transmis par adresse, c'est à dire en utilisant le mot "var" devant, qui indique que toutes les modifications du paramètre à un niveau quelconque de la procédure récursive se répercuteront sur le paramètre initial).

De manière itérative, cette fonction et cette procédure se font très facilement :on parcourt la chaîne d'un bout à l'autre et on accumule les caractères un par un dans une chaîne auxiliaire en prenant soin de mettre chaque nouveau caractère en tête de la chaîne auxiliaire. Voici cette première solution :

function inverse(st: string):

string; var aux: string;
i: integer;
begin aux := '';
for i := 1 to length(st) do

aux := st[i] + aux;
inverse := aux;




end; procedure inverse(var st: string);
var aux: string;
i: integer;
begin
aux := ''; for i := 1 to length(st) do aux := st[i] + aux; st := aux; end;


2eme methode




soit une chaîne 'abc'
- pour obtenir son inverse on met le dernier caractère en tête:
"c" et on le colle à l'inverse du reste qui est "ab"
- pour obtenir l'inverse de "ab" on met le dernier caractère en tête:
"b" et on le colle à l'inverse du reste qui est "a"
- pour obtenir l'inverse de "a" on met le dernier caractère en tête:
"a" et on le colle à l'inverse du reste qui est ""
- on a donc "cba"

unction inverse(st: string): string;
var dernier_caractere: char;
reste: string;
inverse_du_reste: string;
begin
if st = '' then
inverse := '' {--- ceci est le point d'appui ---}
else
begin
dernier_caractere := st[length(st)];
reste := copy(st, 1, length(st) - 1);
inverse_du_reste := inverse(reste);
inverse := dernier_caractere + inverse_du_reste;
end;
end;

procedure inverse(var st: string);
var dernier_caractere: char;
reste: string;
begin
if st = '' then st := '' //--- ceci est le point d'appui, inutile ici
else //--- on aurait pu traduire cela par "if st<>'' then"
begin
dernier_caractere := st[length(st)];
reste := copy(st, 1, length(st) - 1);
inverse(reste); //--- on inverse le reste
st := dernier_caractere + reste;
end;
end;
0