Récursivité visualisée

Parcourez pas à pas comment une fonction C++ récursive s'appelle elle-même : la pile d'appels de la factorielle et l'arbre d'appels de Fibonacci.

Tout est simulé dans ce navigateur ; rien n'est envoyé à un serveur.

factorial(4) est appelé

Appels : 1 · factorial(4) = 24

factorial(4) est appelé

Pile d'appels

factorial(4)?
  • En cours
  • En attente
  • Résolu

Étape 1 / 16

Code

#include <iostream>
using namespace std;
long factorial(int n) { // Calcule n! de façon récursive
if (n == 0) return 1; // Cas de base : 0! vaut 1 et il n'y a plus d'appels
long r = n * factorial(n - 1); // Cas récursif : appeler avec n - 1 et multiplier
return r; // Renvoie le résultat à l'appelant
}
int main() {
int n = 4; // Valeur du curseur
long resultado = factorial(n); // Premier appel, depuis main
cout << resultado << endl; // Résultat final
return 0;
}

Cet outil explique visuellement la récursivité avec deux exemples classiques en C++. Avec la factorielle, vous voyez la pile d'appels : chaque appel de factorial(n) est empilé comme un cadre jusqu'à atteindre le cas de base, puis les cadres se résolvent un à un en renvoyant leur valeur à l'appelant. Avec Fibonacci, vous voyez l'arbre d'appels : chaque fib(n) se ramifie en fib(n-1) et fib(n-2), et les appels répétés sont surlignés pour montrer pourquoi cette version récursive effectue autant de travail en double. Vous choisissez n avec un curseur, lancez l'animation pas à pas et suivez la ligne de code exécutée à chaque instant. Tout est simulé dans votre navigateur.

Comment l'utiliser

  1. Choisissez l'onglet Factorielle ou Fibonacci selon l'exemple à observer.
  2. Réglez n avec le curseur ; l'animation revient à la première étape.
  3. Appuyez sur Lecture ou avancez avec les boutons d'étape précédente et suivante, et changez la vitesse si besoin.
  4. Observez la pile ou l'arbre d'appels, le compteur d'appels et la ligne de code C++ surlignée.

Questions fréquentes

Qu'est-ce que la récursivité ?
Une technique où une fonction s'appelle elle-même sur un problème plus petit jusqu'à atteindre un cas résoluble directement, puis combine les résultats.
Qu'est-ce que le cas de base ?
La condition qui arrête les appels : pour la factorielle, n égal à 0 renvoie 1 ; pour Fibonacci, n inférieur à 2 renvoie n. Sans cas de base, la récursivité ne se termine jamais.
Qu'est-ce que la pile d'appels ?
La structure où le programme garde chaque appel en cours. Chaque appel est empilé quand il est fait et dépilé quand il renvoie sa valeur, selon l'ordre LIFO.
Pourquoi Fibonacci récursif répète-t-il du travail ?
Parce que fib(n) appelle fib(n-1) et fib(n-2), et que ces appels recalculent plusieurs fois les mêmes valeurs. C'est pourquoi l'arbre grandit si vite et que les appels répétés sont surlignés.

Outils associés