Fonction récursive JavaScript
Résumé: dans ce tutoriel, vous apprendrez à utiliser la technique de récursivité pour développer une fonction récursive JavaScript, qui est une fonction qui s’appelle elle-même.
Introduction aux fonctions récursives JavaScript
Une fonction récursive est une fonction qui s’appelle jusqu’à ce qu’elle ne le fasse pas. Et cette technique s’appelle récursivité.
Supposons que vous ayez une fonction appelée recurse()
. La recurse()
est une fonction récursive si elle s’appelle à l’intérieur de son corps, comme ceci:
Code language: JavaScript (javascript)function recurse() { // ... recurse(); // ...}
Une fonction récursive a toujours la condition d’arrêter de s’appeler, sinon elle s’appellera indéfiniment. Ainsi, une fonction récursive ressemble généralement à ce qui suit:
Code language: JavaScript (javascript)function recurse() { if(condition) { // stop calling itself //... } else { recurse(); }}
Généralement, les fonctions récursives sont utilisées pour décomposer un gros problème en plus petits. Vous pouvez constater qu’ils sont fortement utilisés dans les structures de données comme les arbres binaires et les graphiques et les algorithmes tels que la recherche binaire et le quicksort.
Exemples de fonctions récursives JavaScript
Prenons quelques exemples d’utilisation des fonctions récursives.
1)Un exemple de fonction récursive JavaScript simple
Supposons que vous deviez développer une fonction qui compte à rebours d’un nombre spécifié à 1. Par exemple, pour décompter de 10 à 1 :
321
Ce qui suit affiche la fonction countDown()
:
Code language: JavaScript (javascript)function countDown(fromNumber) { console.log(fromNumber);}countDown(3);
Cette countDown(3)
affiche uniquement la fonction numéro 3.
Pour décompter le nombre 3 à 1, vous pouvez :
- afficher le nombre 3.
- et appelez le
countDown(2)
qui affiche le nombre 2. - et appelez le
countDown(1)
qui affiche le nombre 1.
Ce qui suit change la countDown()
en une fonction récursive :
Cette countDown(3)
s’exécutera jusqu’à ce que la taille de la pile d’appels soit dépassée, comme ceci :
Code language: JavaScript (javascript)Uncaught RangeError: Maximum call stack size exceeded.
because car elle n’a pas la condition de arrête de t’appeler.
Le compte à rebours s’arrêtera lorsque le nombre suivant sera nul, par conséquent, nous ajoutons une condition if comme suit:
Sortie:
321
Le countDown()
semble fonctionner comme prévu.
Cependant, comme mentionné dans le didacticiel sur le type de fonction, le nom de la fonction fait référence à l’objet fonction réel.
Si quelque part dans le code, le nom de la fonction est défini sur null, la fonction récursive cessera de fonctionner.
Par exemple, le code suivant entraînera une erreur :
Code language: JavaScript (javascript)let newYearCountDown = countDown;// somewhere in the codecountDown = null;// the following function call will cause an errornewYearCountDown(10);
Erreur :
Code language: JavaScript (javascript)Uncaught TypeError: countDown is not a function
Comment fonctionne le script:
- Tout d’abord, attribuez le nom de la fonction
countDown
à la variablenewYearCountDown
. - Deuxièmement, définissez la référence de fonction
countDown
surnull
. - Troisièmement, appelez la fonction
newYearCountDown
.
Le code provoque une erreur car le corps de la fonction countDown()
fait référence au nom de la fonction countDown
qui a été défini sur null
au moment de l’appel de la fonction.
Pour le corriger, vous pouvez utiliser une expression de fonction nommée comme suit:
2) Calculer la somme des chiffres d’un nombre exemple
Étant donné un nombre, par exemple, 324, calculer la somme des chiffres 3 + 2 + 4 = 9.
Pour appliquer la technique récursive, vous pouvez utiliser les étapes suivantes :
f(324) = 4 + f(32)f(32) = 2 + f(3)f(3) = 3 + 0 (stop here)
So
f(324) = 4 + f(32) f(324) = 4 + 2 + f(3) f(324) = 4 + 2 + 3
Ce qui suit illustre la fonction récursive sumOfDigits()
:
Comment cela fonctionne :
>
Résumé
- Une fonction récursive est une fonction qui s’appelle jusqu’à ce qu’elle ne le fasse pas
- Une fonction récursive a toujours une condition qui empêche la fonction de s’appeler elle-même.
- Ce tutoriel a-t-il été utile?
- Ouinon