Insight 24.4.1.
It is easier to debug recursion if we store the value that is returned from the recursive call, calculate and store the answer for the current call, and then return the result. That way we can use a debugger or print statements to view how the result is being built up level by level.
The original version of
factorial, which did return n * factorial(n - 1);, gave us no chance to see what came back from the call factorial(n - 1) or what value would be returned.

