DenisVASI, тебе надо не про программирование читать, а про архитектуру ЭВМ. Любая рекурсивная функция просто вызывает сама себя, пока не выполнится какое-либо условие, из-за этого рекурсия кушает стек, т.к. старые вызовы туда записываются, а после выполнения условия функции выполняются из стека. Конечно, компиляторы стараются развернуть рекурсию, но от этого изменится только потребление стека, а результат останется прежним. У тебя вот что происходит:
Вызывается функция с n=5, идем в условие else, вызываем функцию (ничего пока не умножается), n как была 5, так и отправляется в стек, функция вызывается с аргументом 4, дальше по аналогии. Когда дойдет до return 1, всё пойдет разворачиваться из стека, 1*2*3*4*5.
Как-то так, хотя я давно теорию не смотрел, могу малость путать.