imi explicati pas cu pas problema, va rog! multumesc
Răspunsuri la întrebare
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
Mai corect spus este adresa primului byte din prima instructiune in memorie.