Qu'est ce que la programmation itérative et récursive, comment l'appliquer en PHP.
Date de publication : 10/05/2005 ,
Date de mise a jour : 14/07/2005
Par
Genova (Autres articles)
Découvrez deux méthodes en programmation qui vous permettront d'optimiser vos fonctions.
Introduction
1. Programmation itérative
2. Programmation récursive
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.
1. 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 :
function my_pow($nombre, $puissance)
{
if ($puissance < 0)
{
return (0);
}
$resultat = 1;
for ($i = 0; $i < $puissance; $i++)
{
$resultat *= $nombre;
}
return ($resultat);
}
Pour l'utilisation, faites :
echo my_pow(3, 4);
2. Programmation récursive
La programmation recursive 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 :
function my_dossier($dir)
{
$fd = opendir($dir);
while ($file = readdir($fd))
{
if (is_dir($dir . $file))
{
echo '<b>Dossier :: ' . $dir . $file . '/</b><br />';
my_dossier($dir . $file . '/');
}
else
{
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.
function my_print_r($tab)
{
echo 'array(<br />';
foreach ($tab AS $key => $value)
{
if (is_array($value))
{
my_print_r($value);
}
else
{
echo '\'' . $key . '\' => \'' . addslashes($value) . '\',<br />';
}
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 ;)
Les sources présentés sur cette pages sont libre de droits, et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright Genova. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérets.
|