Depinde ce faci in acea functie
sa-ti dau un exemplu:
#include <cstdio>
int x[10], y[10];
int main()
{
for(int i = 1 ;i <= 20; ++i)
x[i] = i;
printf("%d\n", y[1]);
return 0;
}
vezi ce se intampla
In acea functie construiesc un arbore si sunt sigur ca nu depaseste.
void construire_arb_y_max (int st, int dr, int poz)
{
if (st == dr)
{
frz_arb_y_max[st]=poz;
return;
}
int mij = (st+dr)/2;
construire_arb_y_max (st,mij,2*poz);
construire_arb_y_max (mij+1,dr,2*poz+1);
}
void construire_arb_y_min (int st, int dr, int poz)
{
arb_y_min[poz] = INF;
if (st == dr)
{
frz_arb_y_min[st]=poz;
return;
}
int mij = (st+dr)/2;
construire_arb_y_min (st,mij,2*poz);
construire_arb_y_min (mij+1,dr,2*poz+1);
}
Dupa ce apelez
construire_arb_y_max, cred ca functia calculeaza bine frunzele in
frz_arb_y_max, numai ca pune si niste valori ciudate in
frz_arb_y_min (cam jumatate din cele din max).
Cand apelez
construire_arb_y_min, se formeaza valorile din
frz_arb_y_max, numai cu o pozitie mai in fata (si fara prima valoare). Astfel, cand ajunge sa calculeze ultima frunza in f
rz_arb_y_min, crapa.