Principe -
Exemple 1 -
Avertissement -
Exemple 2 -
Questions
Définition et utilité
La programmation récursive est une technique algorythmique applicable dans n'importe quel langage de programmation (du moment que l'on peut
faire des fonctions bien sur).
Elle permet d'effectuer des traitements, souvent programmables aussi avec des boucles (while et for) mais de façon beaucoup plus légère à
l'exécution qu'avec celles-ci. Bien maîtrisée, cette méthode offre des possibilités très utiles dans certains cas. Ceci-dit, dans un souci
de clarté, je m'efforcerai de donner des exemples assez simples afin de bien cerner le problème.
Principe
Le principe est relativement simple mais assez délicat à mettre en oeuvre
puisque, comme dans la programmation avec des boucles, si vous vous loupez
quelque part, vous risquez de générer une boucle infinie et donc : GROSSE
ET PITOYABLE PLANTADE au grand bonheur d'IE !!!
Méthode récursive
<script language="JavaScript"><!--
function fac(nombre) { // Condition de sortie if(nombre<2) return 1 // Appel récursif else return nombre * fac(nombre-1) }
// Appel initial de la fonction document.write(fac(10))
//--></script>
|
|
Méthode itérative
<script language="JavaScript"><!--
function fac(nombre) { result = 1 while(nombre>1) { result *= nombre nombre -- } return result }
// Appel de la fonction document.write(fac(10))
//--></script>
|
|
|
Ce script affiche 3628800 soit la factorielle de 10 (10!=1x2x3x4x5x6x7x8x9x10)
|
Pour expliquer le fonctionnement, je vais utiliser un autre exemple
simple mais valide uniquement pour Internet Explorer puisqu'il fait
intervenir le filtre Alpha du navigateur.
Le but sera de faire apparaitre une image avec un effet de fondu programmé
en JavaScript. Rien de plus simple, il suffit d'incrémenter la valeur
propriété de l'Alpha du filtre. Mais si nous nous contentons
de faire celà dans une boucle, nous n'aurons aucune temporisation
et donc l'image ne s'affichera que quand la boucle sera finie : Bidon.
Il nous faut donc passer par un setTimeout.
Je tiens à rappeler que ce script peut être réalisé de manière
beaucoup plus simple, mais qu'ici notre but est de montrer le fontionnement
de la récursivité alors ne bombardez pas mon mail svp :)
La programmation récursive impose trois étapes importantes
:
1 - Initialisation (exterieure à la fonction)
2 - Traitement
3 - Test condition de sortie ; Si non, retour à étape 2 ;
Si oui, rien du tout.
Si vous en oubliez une, il est fort probable que votre navigateur vous
manque de respect.