Categories: MSDN / DotNet / Java / Scripts / Linux / PHP Ask - La ask - La Answer

Question about recursion

Hello,

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
[3455 byte] By [ericelysia] at [2007-11-11 8:02:25]
# 1 Re: Question about recursion
hmm

can you put the line
cout.flush();

between the cout statement and the return statement?
see what that does.
jonnin at 2007-11-11 21:01:36 >