We dont need to return 1 if n = 0 because we set the return value (product) to 1 at the first line in the function so it can not be 0.
If you did this for visual reasons thats fine i just wanted to say that.
The reduce() method syntax for callbacks assigns the accumulator value followed by the currentValue, so I think the above variables should be switched.
While the previous return functioned the same (because it was calling another factorial function), it was not recursive. All credit still to ThirtyThreeB, just thought this might confuse some people and was worth fixing!