У вас функция вызывает саму себя.
Промежуточный результат записывается в res и передается в этот новый вызов.
Все вычисления начинаются только тогда, когда рекурсия достигнет конца и вернет res.
Вот картинка под ваш пример. Обратите внимание на зеленые прямоугольники.