Răspuns :
Explicație:
1. Operatorul conditional ?: este echivalent cu un if else.
Deci: return x > 0 ? x + f2(x-1) : 0; este echivalent cu
if (x > 0) return x + f2(x - 1);
else return 0;
2. Intre functiile f1 si f2 exista mecanismul de recursivitate indirecta (functiile se apeleaza recursiv intre ele)
3. tab este un vector de pointeri catre: functii cu un parametru de tip int si care returneaza valori int (fiecare element al vectorului este adresa de memorie unde este stocat codul functiei). Vectorul este initializat cu elementele f2, f1, f1, f2.
Astfel tab[0] este codul functiei f2, iar tab[0](0) este apelul functiei f2 cu valoarea 0.
tab[0](0) <=> f2(0)
tab[1](1) <=> f1(1)
tab[2](2) <=> f1(2)
tab[3](3) <=> f2(3)
Deci codul din main se executa astfel:
i = 0 => f2(0) = 1
i = 1 => f1(1) = 1 + f2(0) = 1 + 1 = 2
i = 2 => f1(2) = 2 + f2(1) = 2 + 1 * f1(0) = 2 + 1 * 0 = 2
i = 3 => f2(3) = 3 * f1(2) = 3 * (2 + f2(1) ) = 3 * ( 2 + 1 * f1(0) ) = 3 * ( 2 + 1 * 0) = 3 * 2 = 6
Vă mulțumim că ați ales să vizitați platforma noastră dedicată Informatică. Sperăm că informațiile disponibile v-au fost utile. Dacă aveți întrebări suplimentare sau aveți nevoie de sprijin, nu ezitați să ne contactați. Vă așteptăm cu drag și data viitoare! Nu uitați să adăugați site-ul nostru la favorite pentru acces rapid.