Récursivité

oook -  
 oook -
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

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Bonjour,

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


      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
    2. KX Messages postés 19031 Statut Modérateur 3 020
       
      Ç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
    3. oook
       
      Ok merci bien.
      0
    4. oook
       
      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
    5. KX Messages postés 19031 Statut Modérateur 3 020
       
      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