This video is going to trace through the function factorial, which is recursive. Note that there is a call to factorial as part of the function's return statement. We begin in main, and to the first line declares a variable x and initializes it to factorial of three. We create a frame for factorial, where n has the value of 3, mark call site one, and move our execution arrow into the factorial function. n is not less than or equal to zero, so we skip the if statement. We are now at the return statement, which has a recursive call to factorial. This time with the argument 2. I'm also placing a 2 on the call site marker to indicate that when we finish this call to factorial, we need to return to call site 2. Let's step into the function, n = 2, which is not less than or equal to 0. We'll move down to the final line of the function and place a recursive call to factorial. This time with argument 1, but the same call site location 2. We step into the function, move down to the final line of code where we have another recursive call to factorial, this time with the argument 0. We step into the function, and this time n <= 0, so we have a return value of 1. We're going to send one back to the call site location of the function that called this one, and return back to the call site location. Now we have some multiplication. 1*1 gives us the value 1, and now we're going to return 1 to the function that called this function. We return to the call site location, and now we're in the function factorial where n has the value 2. So 2*1 gives the value 2, which we will return to the function that called this instance. Now we're in the initial execution of the factorial function where n has the value 3. We're going to create a return value of 6, and send that to the initial call to factorial. Now we can leave the function and return to main, finishing this assignment statement, giving x the value factorial of 3 which has the value 6.