Récursivité

Fermé
oook - 14 févr. 2017 à 21:47
 oook - 18 févr. 2017 à 21:15
Bonjour,

je veux inverser un tableau d'entier en algorithme de façon récursive :


procédure Inverse ( t: tab)
var
i : entier
début
pour i de 1 à t.longueur
si (i<t.longueur/2) alors
temp <– t[i];
t[i] <– t[t.longueur-1-i];
t[t.longueur-1-i] <– temp;
inverse(t,i+1);
finsi
fin


qui peut me corrigé SVP.

1 réponse

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
14 févr. 2017 à 21:58
Bonjour,

De façon récursive ça veut dire sans boucle...
Donc commence par enlever ta boucle et travaille récursivement.
0


procédure Inverse ( t: tab, i: entier)

début
si (i<t.longueur/2) alors
temp <– t[i];
t[i] <– t[t.longueur-1-i];
t[t.longueur-1-i] <– temp;
inverse(t,i+1);
finsi
fin

0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
14 févr. 2017 à 22:17
Ça semble correct, il manque juste à préciser comment tu commences.

Ça peut évidemment s'améliorer pour éviter de calculer à chaque fois t.longueur/2 et t.longueur-1 qui valent toujours la même chose.
0
Ok merci bien.
0
si j'écris l'algorithme comme suit, est ce que c'est correct :


procédure Inverse ( t: tab, n: entier)
var
aux : entier
début
aux <-- t[1]
t[1] <-- t[n]
t[n] <-- aux
inverse(t[2], n - 2 )
fin

0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
18 févr. 2017 à 19:07
Tu ne peux pas faire
inverse(t[2], n - 2 )
car t[2] est un entier, pas un tableau.

Remarque : comme indiqué au dessus, il faudrait que tu montres comment tu appelles cette procédure Inverse initialement, car celle que tu nous montres est intermédiaire à une autre procédure qui devrait n'avoir qu'un seul paramètre : le tableau.
0