X^0 and 0! aren't actually special cases though, you can reach them logically from things which are obvious.
For X^0: you can get from X^(n) to X^(n-1) by dividing by X. That works for all n, so we can say for example that 2³ is 2⁴/2, which is 16/2 which is 8.
Similarly, 2¹/2 is 2⁰, but it's also obviously 1.
The argument for 0! is basically the same. 3! is 1x2x3, and to go to 2! you divide it by 3.
You can go from 1! to 0! by dividing 1 by 1.
In both cases the only thing which is special about 1 is that any number divided by itself is 1, just like any number subtracted from itself is 0
It's been a few years since my math lectures at university and I don't remember these two being explained so simple and straightforward (probably because I wasn't used to the syntax in math at the time) so thanks for that! This'll definitely stick in my brain for now
Factorial is one of the solutions of the recurrence relationship f(x+1) = x * f(x). If one states that f(1) = 1, then it only follows from the recurrence that f(0) = 1 too, and in fact f(x) is undefined for negative integers, as it is with any function that has the property.
It would be more of an exception to say f(0) != 1, since it explicitly denies the rule, and instead would need some special case so that its defined in 0.