Dobrze się domyślasz, bo to właśnie zasługa rekurencyjnego wywołania funkcji f(). Teraz analizując wszystko po kolei:
Przy jej pierwszy wywołaniu w argumencie podajesz liczbę 2.
W funkcji pierwszym if-ie spełniony zostaje warunek 2<3, więc funkcja zostaje wywołana ponownie dla liczby 2+1 = 3 (1-szy rząd rekurencji).
W tym wywołaniu pierwszy if nie zostaje spełniony, bo 3<3 nie jest prawdą i funkcja f() nie jest ponownie wywoływana. Na ekranie drukowana jest liczba 3.
W następnym if-ie spełniony jest warunek 3<5, więc funkcja ponownie jest wywoływana rekurencyjnie dla liczby 3+2 = 5 (2-gi rząd rekurencji).
Tutaj warunek 5<3 nie jest również spełniony, więc nie ma kolejnego wywołania funkcji f(). Na ekranie drukowana jest liczba 5.
Kolejny warunek też nie jest spełniony, bo 5<5, więc funkcja się kończy i... wracamy do 1-szego rzędu rekurencji. To wywołanie od razu również się kończy i wracamy do podstawowego wywołania funkcji.
Na ekranie drukowana jest liczba 2.
Tu wchodzimy do drugiego if-a (x<5), gdzie analogicznie jak wyżej otrzymujemy liczby 2+2=4 oraz 4+2=6. Chyba już wszystko jasne! Pozdrawiam!