Есть
стек контекстов, который запоминает значения. Если не ошибаюсь, то ваша функция работает так:
1) Вызывается func(4,3)
n != 1, поэтому возвращается 4 * func(4, 2) (Запоминается в стеке контекстов)
2) Вызывается func(4,2)
n != 1, поэтому возвращается 4 * func(4,1) (Запоминается в стеке контекстов)
3) Вызывается func(4,1)
n === 1, поэтому возвращается x, то есть 4, и дальше срабатывает то, что запомнилось в стеке контекстов:
2) 4 * func(4,1), где func(4,1) = 4, поэтому 4 * 4 = 16
1) 4 * func(4,2), где func(4,2) = 16, поэтому 4 * 16 = 64
Кстати, про рекурсиюИ закрепить