La récursivité ressemble au raisonnement par récurrence que tu as du voir en math. Sauf que dans le raisonnement par récurrence on va de n à n+1 en partant d'un rang (par exemple 0). La récursivité c'est là même chose mais dans l'autre sens. Le rang 0, où l'on s'arrête correspond à ce qu'on appelle le cas d'arrêt.
Exemple : factorielle 5! = 1*2*3*4*5
// méthode itérative :
unsigned int fact(unsigned int x){
unsigned int i,res = 1;
for(i=1;i<x;++i){
res *= i; // ou si tu préfères res= res * i;
}
}
// methode recursive : cas d'arrêt 0 ou 1:
unsigned int fact_rec(unsigned int x,unsigned int res){
if ( x == 0 || x == 1 ) return 1;
return fact_rec(x-1,res*x);
}
unsigned int fact2(unsigned int x){
return fact_rec(x,1);
}
Tu constates que pour la version récursive il faut transmettre dans l'appel recursif la valeur de res (fonction fact_rec). Comme l'utilisateur ne doit pas avoir à l'initialiser à 1, on écrit une fonction fact2 qui est celle qu'il manipulera sans avoir à se soucier de la valeur à mettre pour res.
J'espère que pour toi c'est plus clair ! Dans le cas d'un arbre on est effectivement de faire des appels récursifs donc il faut réfléchir à tes cas d'arrêts (on a atteint une feulle par exemple) et parcourir chaque branche fille dans ton appel récursif.
Bonne chance