marți, mai 20

Despre++

Scurtă poveste pentru calculatoriști.

In labul de SD am reîntâlnit funcția pentru calculul înălțimii unui arbore, de data asta un BST, dar nu intervine nimic particular. O scriu voios, varianta recursivă (nu m-a preocupat să știu dacă există alta), rapid de scris, nothin fancy 'bout it. Execut.. 0.Hm.. nu e bine. O iau pe toate părțile posibile, tot 0. Măi să fie. Mă uit în curs, mă uit în carte. E bine, dar de ce nu îmi calculează nimic? Așa arăta:

int h (bt * r ){
int h1,h2,hmax;
if(r!=NULL)
{
h1=h(r->st);
h2=h(r->dr);
hmax=(h1<h2) ? h2 : h1;
return hmax++;
}
return 0;
}

Hai, o bomboană pe email pentru cine se prinde.


Ce gândesc eu.. hmax++ ăla nu prea își face treaba, probabil trebuie să scriu hmax+1, 1 fiind valoare în sursă, care trece prin preprocesor, e alocat static de compilator și deci poate fi pus pe stiva internă a recurenței, spre deosebire de diafanul ++. Execut, înălțimea iese 6, iar eu zâmbesc victorios de parcă cine știe ce descoperire am făcut. Târziu mi-am dat seama (când zic târziu, mă refer chiar și la câteva zile după) că de fapt nu era nimic greșit cu ++, doar că trebuie preincrementat. return ++hmax;
Tocmai acum am înțeles cu adevărat trucul cu poziționarea incrementării, eu fiind crescut și obișnuit cu php-ul, micul magician al programatorilor provinciali doritori să facă un ban rapid (na c-am zis-o), care te învață prost - să programezi repede, să îți iasă soluția, fără să te doară capul de memorie, complexitate, tipuri și structuri de date, artificii de sintaxă și tot ce înseamnă programarea de finețe.

Niciun comentariu: