Fonction de recurcivité

Fermé
the_tunisian Messages postés 10 Date d'inscription vendredi 30 novembre 2007 Statut Membre Dernière intervention 20 décembre 2007 - 30 nov. 2007 à 12:04
miss_bacinfo Messages postés 4 Date d'inscription jeudi 29 novembre 2007 Statut Membre Dernière intervention 5 décembre 2007 - 1 déc. 2007 à 20:05
Bonjour,
salut, est ce que quelquin peut m'envoyer une fonction recursive(en turbo pascal) qui permet d'inverser une chaine de caractére
A voir également:

1 réponse

miss_bacinfo Messages postés 4 Date d'inscription jeudi 29 novembre 2007 Statut Membre Dernière intervention 5 décembre 2007
1 déc. 2007 à 20:05
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