I wrote a program that calculates factorial of given nuber by recursion and additionally displays the number of recursion calls.
It works as expected, when i store result in separated variable "result"
long long result = calculateFactorial(factorialNumber, counter);
    cout << "\nfactorial is equal to: " << result
         << "\nRecursion executed: " << counter - 1 << " times.\n";
but when i want to do it like that:
    cout << "\nfactorial is equal to: " << calculateFactorial(factorialNumber, counter)
         << "\nRecursion executed: " << counter - 1 << " times.\n";
the counter is always equal to initial value -1 (-1). Can you explain me, why the second way does not work properly?
Code:
#include <iostream>
using namespace std;
long long calculateFactorial(int factorialNumber, int &counter);
int main() {
    int counter = 0;
    int factorialNumber;
    cout << "Enter factorial number: ";
    cin >> factorialNumber;
    long long result = calculateFactorial(factorialNumber, counter);
    cout << "\nfactorial is equal to: " << result
         << "\nRecursion executed: " << counter - 1 << " times.\n";
    //counter - 1, because first execution is nor recursion.
}
long long calculateFactorial(int factorialNumber, int &counter) {
    if (factorialNumber == 0) {
        return 1;
    }
    if (factorialNumber > 0) {
        counter++;
        return factorialNumber * calculateFactorial(factorialNumber - 1, counter);
    }
    return 2;
    //error code - can be captured
}
Thanks :)
 
    