Question about recursion
I am trying to understand recursion by using the following example.
#include
#include
using namespace std;
unsigned long factorial( unsigned long ); // function prototype
//----------------------
int main()
{
// Loop 4 times. During each iteration, calculate factorial( i ) and display result.
for ( int i = 0; i <= 4; i++ )
{
cout << "\n i = " << i << endl;
cout << endl << setw( 2 ) << i << "! = " << factorial( i ) << endl;
}
return 0; // indicates successful termination
} // end main
//----------------------
// recursive definition of function factorial
unsigned long factorial( unsigned long number )
{
// base case
if ( number <= 1 )
{
return 1;
}
// recursive step
else
{
cout << endl << "number = " << number << " factorial(number - 1) = " << factorial(number - 1)
<< " number * factorial(number - 1) = " << number * factorial( number - 1 ) << endl;
return number * factorial( number - 1 );
}
} // end function factorial
//----------------------
/*
output:
i = 0
0! = 1
i = 1
1! = 1
i = 2
number = 2 factorial(number - 1) = 1 number * factorial(number - 1) = 2
2! = 2
i = 3
number = 2 factorial(number - 1) = 1 number * factorial(number - 1) = 2
number = 2 factorial(number - 1) = 1 number * factorial(number - 1) = 2
number = 3 factorial(number - 1) = 2 number * factorial(number - 1) = 6
number = 2 factorial(number - 1) = 1 number * factorial(number - 1) = 2
3! = 6
i = 4
number = 2 factorial(number - 1) = 1 number * factorial(number - 1) = 2
number = 2 factorial(number - 1) = 1 number * factorial(number - 1) = 2
number = 3 factorial(number - 1) = 2 number * factorial(number - 1) = 6
number = 2 factorial(number - 1) = 1 number * factorial(number - 1) = 2
number = 2 factorial(number - 1) = 1 number * factorial(number - 1) = 2
number = 2 factorial(number - 1) = 1 number * factorial(number - 1) = 2
number = 3 factorial(number - 1) = 2 number * factorial(number - 1) = 6
number = 2 factorial(number - 1) = 1 number * factorial(number - 1) = 2
number = 4 factorial(number - 1) = 6 number * factorial(number - 1) = 24
number = 2 factorial(number - 1) = 1 number * factorial(number - 1) = 2
number = 2 factorial(number - 1) = 1 number * factorial(number - 1) = 2
number = 3 factorial(number - 1) = 2 number * factorial(number - 1) = 6
number = 2 factorial(number - 1) = 1 number * factorial(number - 1) = 2
4! = 24
Press any key to continue
*/
I do understand that when i = 0, the base case is true, therefore 1 is returned. 0! = 1
When i = 1, the base case is true and 1 is returned. 1! = 1
When i = 2, the base case is not true, so number * factorial( number - 1 ) is returned, which is 2 * factorial( 1 ). 2 * 1 = 2. 2 is returned. 2! = 2
At this point, I have a question. The next line says i = 3. Then it says number = 2. How does number become 2 if i = 3?
Thanks,
Eric

