Poi daca ai te-ai fi uitat pe ce ti-am dat si ai fi inteles ti-ai fi dat seama de ce afiseaza aia.
O sa trec peste teoria cu stiva si asa.
Trebuie sa intelegi o chestie foarte simpla: Cand apelezi o functie programul tau se duce direct la inceputul functiei si abia ce se termina functia asta apelata apoi continua de unde a ramas.
Adica tu apelezi asa:
1. F(4)
iti intra in else din motive (clare, sper), acum apeleaza F(3):
iti intra iarasi in else (din aceleasi motive:)) ), apeleaza F(2)...
Interesant este ce se intampla la F(0), intra inf if - ul acela si returneaza valoarea 0.
Din cauza faptului ca programul tau a fost apelat de mai multe ori el revine sa "termine" ce are de facut. Adica revine la F[1] ca sa faca instructionile de dupa apelare, adica cout << counter. In cazul nostru afiseaza 1.
Se observa ca acum se termina functia.
Programul revine la F(2), F(3), F(4), de fiecare data afisand counter-ul.
Deci ordinea in care sunt afelate functiile este F(4), F(3)...F(0), iar afisarea e chiar invers.
Iti sugerez sa studiezi mai bine (din manual sau de pe net) revursivitatea. Este un concept esential pentru un programator.
http://www.infoarena.ro/blog/putina-recursivitateUite poate intelegi din comentariile de la articolul asta.
Succes!