Informatică, întrebare adresată de ionelukionelukpbv3dk, 8 ani în urmă

imi explicati pas cu pas problema, va rog! multumesc

Anexe:

CinevaFaraNume: Am si eu curiozitatea: de unde iei toate problemele astea?
CinevaFaraNume: Si ce parte vrei explicata de aici?
ionelukionelukpbv3dk: din examenul de la facultate

Răspunsuri la întrebare

Răspuns de katanau26
0

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


CinevaFaraNume: "fiecare element al vectorului este adresa de memorie unde este stocat codul functiei"
Mai corect spus este adresa primului byte din prima instructiune in memorie.
Alte întrebări interesante