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 :)