I am studying for an exam in C
I would like to know WHY THIS FUNCTION RETURN 6.
#include <iostream>
#include <string>
using namespace std;
int s(int n);
int main()
{
int a;
a = 3;
cout << s(a);
return 0;
}
int s(int n)
{
if(n == 0) {
return 1;
}
return s(n-1)*n;
}
The first passage n value is 3 and must be return 6. The second passage n value is 2 and must be return 4.
Why the final result is 6. Maybe cout print only the first value ?
Thank you for your help
CodePudding user response:
main()
prints the return value of s(3)
.
s(3)
returns s(2)*3
s(2)
returns s(1)*2
s(1)
returns s(0)*1
s(0)
returns 1
Thus, the result of s(3)
is (((1*1)*2)*3) = 6
CodePudding user response:
This is how recursion works.
I suggest you follow the code in your head, or on a piece of paper.
First, s()
is called with 3
. Since n
is not 0
, the function returns s(n-1)*n
. n
at this point is 3
. To calculate s(n-1)
that same function is called again (recursively), now with n-1
, which is 2
.
And so on...