Informatică · clasa a X-a

Subprograme și recursivitate

„Nu înțeleg cum o funcție se poate apela pe ea însăși și nu pot urmări ce returnează.”

Semne că blocajul vine de aici

  • Uiți cazul de bază și funcția nu se oprește niciodată.
  • Nu faci diferența între parametru transmis prin valoare și prin referință.
  • Nu poți calcula pe hârtie f(4) pentru o funcție recursivă dată.

Noțiunea care lipsește de obicei

Înainte să refaci exerciții de tipul acesta, verifică dacă stăpânești noțiunile de mai jos. De cele mai multe ori, blocajul se rezolvă acolo, nu aici.

Explicația, pe scurt

O funcție primește parametri, face un calcul și (eventual) returnează un rezultat. Transmiterea prin valoare copiază argumentul (modificările nu se văd în apelant); prin referință (int &x în C++) funcția lucrează direct pe variabila apelantului.

O funcție recursivă se apelează pe sine cu un caz „mai mic” și are obligatoriu un caz de bază, în care răspunde direct, fără alt apel. Factorial: f(0) = 1 (caz de bază), f(n) = n × f(n − 1).

Ca să urmărești un apel, scrie lanțul în jos până la cazul de bază, apoi întoarce-te în sus înlocuind valorile: f(3) = 3 × f(2) = 3 × 2 × f(1) = 3 × 2 × 1 × f(0) = 6.

Exemplu rezolvat

Fie f(n) = 0 dacă n = 0, altfel f(n) = n % 10 + f(n / 10). Calculează f(123).

  1. 1f(123) = 3 + f(12).
  2. 2f(12) = 2 + f(1).
  3. 3f(1) = 1 + f(0) = 1 + 0 = 1.
  4. 4Înapoi: f(12) = 2 + 1 = 3; f(123) = 3 + 3 = 6 — suma cifrelor.

Răspuns: 6

Verificare rapidă

Răspunsul rămâne doar în pagina ta; nu este trimis sau salvat.

Fie g(n) = 1 dacă n ≤ 1, altfel g(n) = 2 × g(n − 1). Cât este g(4)?