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.
clasa a IX-a
Structuri repetitive: for, while, do-while
„Nu știu când să folosesc for și când while, și buclele mele fie nu se opresc, fie rulează o dată în plus.”
Vezi ce îți lipsește
clasele IX–X
Vectori (tablouri unidimensionale)
„Nu înțeleg indicii, nu știu să parcurg un vector și să găsesc maximul sau să număr elementele cu o proprietate.”
Vezi ce îți lipsește
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).
- 1f(123) = 3 + f(12).
- 2f(12) = 2 + f(1).
- 3f(1) = 1 + f(0) = 1 + 0 = 1.
- 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)?