Clam, 99 7 bytes
p;#>q0B1Qp;#qB1Q
4 extra bytes just to handle 0
-2 bytes thanks to ASCII-only
Explanation
p;#>q0B1Qp;#qB1Q - Implicit Q = first input
p - Print...
; - Product of...
B1Q - Range(1...Q) OR Range(Q...1) if (Q < 1)
#>q0#q - Where (q => q) >ie (q != 0)