Récursivité JavaScript

Apprenez les bases de la récursivité en JavaScript

Une fonction peut s'appeler.

C'est ce que signifie la récursivité. Et cela nous permet de résoudre les problèmes de manière soignée.

Pour ce faire, vous avez besoin d'une expression de fonction nommée, en d'autres termes:

function doSomething() {

}

Donc on peut appelerdoSomething()à l'intérieurdoSomething().

The simplest example we can make is calculating a factorial of a number. This is the number that we get by multiplying the number for (number - 1), (number - 2), and so on until we reach the number 1.

La factorielle de 4 est (4 * (4 - 1) * (4 - 2) * (4 - 3)) = 4 * 3 * 2 * 1, soit 24.

Nous pouvons créer une fonction récursive pour la calculer automatiquement:

function factorial(n) {
  return n >= 1 ? n * factorial(n - 1) : 1
}

factorial(1) //1 factorial(2) //2 factorial(3) //6 factorial(4) //24

On peut aussi utiliser une fonction fléchée si on préfère:

const factorial = (n) => {
  return n >= 1 ? n * factorial(n - 1) : 1
}

factorial(1) //1 factorial(2) //2 factorial(3) //6 factorial(4) //24

C'est maintenant le bon moment pour parler de lapile d'appels.

Imaginez que nous faisons une erreur, et au lieu de calculer la factorielle comme

const factorial = (n) => {
  return n >= 1 ? n * factorial(n - 1) : 1
}

nous faisons ceci:

const factorial = (n) => {
  return n >= 1 ? n * factorial(n) : 1
}

Comme vous pouvez le voir, nous appelonsfactorial(n)À l'infini. Il n'y a pas de fin, car nous avons oublié de le baisser à chaque appel.

Si vous exécutez ce code, vous obtiendrez cette erreur:

RangeError: Maximum call stack size exceeded

Every time a function is invoked, JavaScript needs to remember the current context before switching to the new one, so it puts that context on the call stack. As soon as the function returns, JavaScript goes to the call stack and picks the last element that was added, and resumes its execution.

Maximum call stack size exceeded means that too many elements were put on the stack, and your program crashed.


More js tutorials: