Basically its a just a convention, an additional definition, but it is not done completely arbitrary to set the empty product equal to the multiplicative identity.
You may see it so that there is exactly 1 way to arrange nothing (= 0 elements) 😉
In Math often things are not that easy as they may look on first sight.
The examples with negative numbers you give clearly show this.
According to your definition n! := n* (n-1)! with 1! := 1 as an anchor, it would be 0!=0*(-1)! and therefore (-1)!=0!/0=1/0 ... Oooops!!
Actually Gamma(x) is not defined for x=0,-1,-2,.... it has poles there. This is the reason why n! is defined only for the members n of the natural numbers (which accodring to the current standards include 0) and not for negative integers.
But no fear - your Mathcad is fully correct, because you typed -1!=1 (which is a correct result) whereas you wanted to see (-1)! = which is undefined and I am pretty sure that MC11 knows that, too 😉
I must admit that I was initially surprised at the results of factorials of negative numbers, but then accepted them for a fact. I implicitly assumed that signs (of numbers) go above/precede multiplication in the calculation order....
There's a Dutch help-sentence that goes: "Meneer van Dalen wacht op antwoord" (literally: "Mister van Dalen is waiting for an answer") in which each first letter stands for: "Machtsverheffen, Vermenigvuldigen, Delen, Worteltrekken, Optellen Aftrekken". In order: Exponentiation, Multiplication, Division, Taking a/the root, Addition, Subtraction.
In the C-programming language the expression -1!=1 is a boolean expression that results in 1 (TRUE).