👤

imi explicati pas cu pas problema, va rog! multumesc

Imi Explicati Pas Cu Pas Problema Va Rog Multumesc class=

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