Quando tu effettui una chiamata ricorsiva, tutte le volte che compare la chiamata alla funzione viene passato, all funzione stessa, il valore ATTUALE del parametro.
Nel tuo caso, quindi si effettua questa chiamata:
return 3 * f(7 / 2) + 4 * f(7 % 2);
La sostituzione avviene in tutti i punti contemporaneamente, in base al valore attuale del parametro.
Ciao.