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 pentru vizita pe site-ul nostru dedicat Informatică. Sperăm că informațiile oferite v-au fost de ajutor. Nu ezitați să ne contactați pentru orice întrebare sau dacă aveți nevoie de asistență suplimentară. Vă așteptăm cu drag data viitoare și nu uitați să ne adăugați la favorite!