Basic question about recursive function

Basic question about recursive function
0

#1

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


#2

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. :slight_smile:


#3

@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 …


#4

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

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