В рекурсии не происходит инкремент счётчика, потому что при каждом вызове рекурсивной функции создается новое локальное окружение (кадр стека), в котором хранятся локальные переменные для этого вызова. Это означает, что каждый раз, когда функция вызывает саму себя, у нее появляется новый счётчик, отличный от предыдущего, и все изменения счётчика происходят только в рамках своего локального окружения.
В данном случае значение `counter` возвращается равным 1, а не 7, потому что в каждом вызове рекурсивной функции счетчик увеличивается только на 1, а не на 6. В первом вызове значение `counter` увеличивается на 1, становится равным 2 и передается в следующий вызов функции. Затем во втором вызове значение `counter` увеличивается на 1, становится равным 3 и передается в следующий вызов функции, и так далее. После завершения последнего вызова функции, когда `n` становится равным 5, счетчик увеличивается на 1 и становится равным 7. Однако это значение не используется или возвращается из функции, поэтому итоговое значение `counter`, возвращаемое из первоначального вызова функции, равно 1.