I. Introduction

L'iteratif et le recursif sont deux facons de programmer, tres utiles, que je vais tenter de vous expliquer. Ces deux types sont utiles notamment pour effectuer un certain nombre de fois (qu'on ne peut déterminer a l'avance) un certain script, et donc permettent une optimisation du code. Si l'iteratif est relativement facile à comprendre, je vous conseille de passer un peu plus de temps sur le recursif qui est un concept pas forcement évident au début. Une fois que vous maîtriserez ces deux concepts de nombreuses percpectives d'optimisations s'ouvriront à vous.

II. Programmation itérative

La programmation iterative est une méthode permettant de répéter un certain nombre d'action un certain nombre de fois, à l'aide d'une boucle et d'une variable qui s'incrémentera à chaque passage (on appelle généralement cette variable $i). La façon la plus simple pour apprendre est avec un exemple. Nous allons créer une fonction my_pow($nombre, $puissance) qui permettra d'élever le nombre $nombre à la puissance $puissance. Mathématiquement que se passe t'il ? Si on prend 3 puissance 4 par exemple, cela équivaut à 3 * 3 * 3 * 3]. Nous allons donc répéter 4 fois ($puissance) la multiplication de $nombre (qui vaut 3 dans notre exemple) par lui meme. Voici la fonction finale :

 
Sélectionnez
function my_pow($nombre, $puissance)

{

   // Par convention si la puissance est negative on retourne 0 ici, en effet nous

   // ne travaillerons ici que sur les entiers.

   if ($puissance < 0)

   {

          return (0);

   }



   // On donne comme valeur au $ resultat 1 a la base, comme ca si jamais on a un nombre

   // a la puissance 0 la boucle ne se passera pas et on renvera 1, sachant qu'un

   // nombre puissance 0 vaut 1

   $resultat = 1;



   // On lance la boucle, a chaque passage on multiplie $resultat par le nombre,

   // et cela tant que $i est inferieur a $puissance

   for ($i = 0; $i < $puissance; $i++)

   {

          $resultat *= $nombre; // equivaut a $resultat = $resultat * $nombre;

   }

   return ($resultat);

}

Pour l'utilisation, faites :

 
Sélectionnez
// Affichera 3 a la puissance 4, soit 81

echo my_pow(3, 4);

III. Programmation récursive

La programmation récursive est une autre méthode permettant de répéter un nombre indéterminé de fois une action. on crée une fonction qui va effectuer une action. Dans cette fonction nous plaçons une condition. Si cette condition est vraie on appelle la fonction à nouveau en son sein même, si c'est faux on sort avec un return. On va ainsi répéter la fonction tant que la condition est vraie. Pour bien comprendre nous allons étudier deux exemples significatifs. Le premier est une fonction qui permet de lister le contenu d'un répertoire, et de tout ses sous-répertoires, ainsi que tout les sous-répertoires des sous-répertoires, etc... Tant qu'il y a des répertoires quoi :), On va donc créer une fonction my_dossier($dir) qui va lister le répertoire qu'il prend comme paramètre. Si on rencontre un répertoire dans ce listage, on appelle à nouveau la fonction avec ce répertoire rencontré, etc... Voici le code :

 
Sélectionnez
function my_dossier($dir)

{

   // On ouvre le dossier

   $fd = opendir($dir);



   // On liste le dossier

   while ($file = readdir($fd))

   {

      // Si le fichier parcouru est un dossier...

      if (is_dir($dir . $file))

      {

         // ...alors on affiche ce dossier en gras et on repete la fonction

         // pour ce dossier.

         echo '<b>Dossier :: ' . $dir . $file . '/</b><br />';

         my_dossier($dir . $file . '/');

      }

      else

      {

         // Sinon on affiche en normal le fichier

         echo 'Fichier :: ' . $dir . $file . '<br />';

      }

   }

   closedir($fd);

}

Bien entendu je ne prend pas en compte pour ce premier exemple l'indentation (tabulation) entre les différents dossiers, je vous laisse le faire ;) Pour le second exemple nous allons recoder la fonction print_r($tab) qui affiche récursivement un tableau de données. Nous allons donc parcourir les éléments de ce tableau, et à chaque sous-tableau rencontré on répète la fonction.

 
Sélectionnez
function my_print_r($tab)

{

   // On est au tout debut d'un tableau donc on affiche array(

   echo 'array(<br />';



   // On parcourt le tableau

   foreach ($tab AS $key => $value)

   {

      // Si la valeur courante est un tableau...

      if (is_array($value))

      {

         // On parcourt le sous tableau rencontre

         my_print_r($value);

      }

      else

      {

         // On affiche la cle et la valeur courante

         echo '\'' . $key . '\' => \'' . addslashes($value) . '\',<br />';

      }



   // On a fini de parcourir le tableau...

   echo '),<br />';

   }

}

Je vous laisse là aussi paginer les tabulations. Bon allez pour finir un petit exercice pas bien compliqué, essayez de refaire la fonction de l'exercice 1, la fonction des puissances qu'on a codé itérativement, refaites la en récursif ;)