Как работает данная рекурсия?
У вас функция вызывает саму себя. 
Промежуточный результат записывается в res и передается в этот новый вызов. 
Все вычисления начинаются только тогда, когда рекурсия достигнет конца и вернет res. 
Вот картинка под ваш пример. Обратите внимание на зеленые прямоугольники. 
paw(2, 5) = 2 * paw(2, 4)
2 * paw(2, 4)                   --> paw(2, 4) = 2 * paw(2, 3)
2 * (2 * paw(2, 3))             --> paw(2, 3) = 2 * paw(2, 2)
2 * (2 * (2 * paw(2, 2)))       --> paw(2, 2) = 2 * paw(2, 1)
2 * (2 * (2 * (2 * paw(2, 1)))) --> paw(2 ,1) = 2
2 * (2 * (2 * (2 * 2)))
На 3 строчке не готовый результат, а просто значение res и оно просто подставляется вместо рекурсивного вызова функции на пятой.