Recursivitate

O funcție recursivă se apelează pe ea însăși. Are nevoie de un caz de bază (condiție de oprire) pentru a nu rula la infinit.

recursion.cpp
int factorial(int n) {
  if (n == 0 || n == 1) return 1;  // caz de bază
  return n * factorial(n - 1);      // apel recursiv
}

cout << factorial(5) << endl;  // 120 (5*4*3*2*1)

Fibonacci recursiv

int fib(int n) {
  if (n <= 1) return n;
  return fib(n-1) + fib(n-2);
}
// fib(0)=0, fib(1)=1, fib(2)=1, fib(3)=2...

Suma cifrelor — recursiv

int sumaCifre(int n) {
  if (n == 0) return 0;
  return n % 10 + sumaCifre(n / 10);
}
cout << sumaCifre(1234) << endl;  // 10
Fiecare apel recursiv ocupă spațiu pe stack. Recursivitate prea adâncă → stack overflow! Pentru n mare, preferă varianta iterativă sau memoizarea.

✏️ Exercițiu

Scrie o funcție recursivă care calculează suma 1+2+3+...+n.

💡 Indiciu: suma(0) = 0, suma(n) = n + suma(n-1)