Buna!
Invat metoda Divide et Impera, intuitiv reusesc sa fac problemele, dar nu inteleg inca constient fiecare pas ce se intampla in memoria calculatorului. Spre exemplu in algoritmul de mai jos, unde trebuie sa gasesc cel mai mare element dintr-un vector (algoritm functional), nu inteleg ce se intampla, cum si unde se retine cel mai mare element, cand compar a cu b la fiecare reapel. De asemenea, nu inteleg ce e cu conditia aceia if (s==d) return v[s]; , ca la recursivitate, dar nu inteleg ce rol are aici. Imi poate explica cineva detaliat? As fi foarte recunoscator.
#include
using namespace std;
int maxim (int v[100], int s, int d)
{
if (s==d)
return v[s];
else
{
int m=(s+d)/2;
int a=maxim(v,m+1,d);
int b=maxim(v,s,m);
if (a>b)
return a;
else
return b;
}
}
int main()
{
int n,v[100];
cin>>n;
for (int i=0;i
cin>>v[i];
cout<
return 0;
}
Răspunsuri la întrebare
Răspuns de
0
s == d este conditia de iesit din recursivitate, adica cazul de baza.
Daca ai alte nelamuriri, intreaba mai detaliat.
sikesjack1:
Comparatiile if (a>b) se stocheaza pe cate un nivel al stivei si cand se termina apelurile se face comparatii succesive? Sau cum functinoeaza?
E exact ca la recursivitate. main apeleaza maxim(v, 0, n-1); maxim(v, 0, n-1) apeleaza maxim(v, (n + 1) / 2 + 1, n) si maxim(v, 0, (n + 1) / 2); apoi fiecare dintre ele apeleaza alte 2, pana se intalneste careva dintre ele (evident careva dintre ultimele) cu s == d, apoi se intorc in ordinea inversa cum au fost chemate si returneaza fiecare ce are de returnat.
Uite un exemplu mai simplu, sa intelegi:
n = 3
maxim(v, 0, n) -> maxim(v, 2, 3) -> maxim(v, 3, 3); in acest moment maxim(v, 3, 3) returneaza v[3], adica 3 (ceea ce nu exista, dar majoritatea compilatoareor o sa-ti returneze ultimul element, deci ai noroc) in variabila 'a' a functiei ce a chemat-o (maxim(v, 2, 3)). In momentul in care returneaza toate valorile functiei sunt sterse din stack.
Poti citi mai multe cu un search pe Google: "memory stack"
Alte întrebări interesante
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Limba română,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă