I saw this about recursive function -

``````function factorial( n ) {
if ( n === 1 ) {
return 1;
}
return n * factorial( n - 1 );
}
``````

And the explanation being given here -

``````factorial( 3 ) is 3 x factorial( 2 ).
factorial( 2 ) is 2 x factorial( 1 ).
factorial( 1 ) meets our if condition, so it’s just 1.
``````

Now some how as i am thinking how can factorial(2) or factorial(3) resolve to values of 2 , 3 in this case , as there is no where saying it should return n …

Also how do they multiply with each other after each step

I am really sorry i was able to grasp it some 6 months back but right now i am totally at loss …

Thanks

Consider `factorial(3)` as an example, the first iteration the code runs as commented below:

``````function factorial( n ) {
// n = 3, this is skipped
if ( n === 1 ) {
return 1;
}

// returns 3 * factorial(2)
return n * factorial( n - 1 );
}
``````

The code continues running because the `factorial(2)` is called, and `factorial(2)` runs as follows:

``````function factorial( n ) {
// n = 2, this is skipped
if ( n === 1 ) {
return 1;
}

// returns 2 * factorial(1)
return n * factorial( n - 1 );
}
``````

Therefore, at this point, `factorial(3)` evaluates to `3 * 2 * factorial(1)`. The code continues running but since `factorial(1)` returns 1, the code stops and therefore `factorial(3)` evaluates to `3 * 2 * 1`, which is 6 as you would expect. I think you may have “forgotten” about some of the code that have already been evaluated as you were following through the logic (for example, the `3 *` part in `3 * factorial(2)` in the first iteration mentioned above). I hope that helps.

1 Like

@honmanyau - thanks i was not able to visualize the fact that the code will run function inside function inside function till it gets to one … which you helped with …

1 Like

Never be sorry to ask, unless you didn’t even tried to understand.

Recursive functions are not “such a basic question” anyway.

1 Like