When you call the function a, it either returns a value immediately for n = 2 or 3, or performs two calls of itself with n-1 and one call with n-2, then returns a value.
So:
a(2) returns immediately.
a(3) returns immediately.
a(4) calls a(3) twice and a(2) once then returns.
a(5) calls a(4) twice (each time calling a(3) twice and a(2) once) and a(3) once then returns.
a(6) calls a(5) twice (each time calling a(4) twice [each time calling a(3) twice and a(2) once] and a(3) once) and a(4) (calling a(3) twice and a(2) once) once then returns.
a(7) calls a(6) twice (each time calling a(5) twice [each time calling a(4) twice {each time calling a(3) twice and a(2) once} and a(3) once] and a(4) [calling a(3) twice and a(2) once] once) and a(5) (calling a(4) twice [each time calling a(3) twice and a(2) once] and a(3) once) once then returns.
a(8) calls a(7) twice (each time calling a(6) twice [each time calling a(5) twice {each time calling a(4) twice and a(3) once} and a(4) {calling a(3) twice and a(2) once} once] and a(5) [calling a(4) twice {each time calling a(3) twice and a(2) once} and a(3) once] once) and a(6) (calling a(5) twice [each time calling a(4) twice {each time calling a(3) twice and a(2) once} and a(3) once] and a(4) [calling a(3) twice and a(2) once] once) once then returns.
...
As you see a call causes a number of indirect calls with lower values of the argument. Fortunately, there are no infinite chains of calls, but the number of indirect calls grows exponentially with n.
This explosion can be avoided by remembering the value of a(n) when it has been computed.