Direct  number of arrangements
Working directly from the definition of factorial as the
number of arrangements of objects, we declare that the
number of ways of arranging zero objects is one, but some
people are unconvinced by this. "There are no objects",
they say, "so you can't arrange them at all. The answer
should be zero."
Well, here's an elaboration of the "arrangement" explanation.
 Suppose you have 5 boxes and five objects. One person goes
into the room and puts one thing in each box. Then someone
else goes in, and they have to write down what the arrangement
is. How many different answers can you get? 5! = 120.
 Suppose you have 4 boxes and four objects. One person goes
into the room and puts one thing in each box. Then someone
else goes in, and they have to write down what the arrangement
is. How many different answers can you get? 4! = 24.
 ...
 Suppose you have one box and one object. One person goes into
the room and puts one thing in each box. Then someone else
goes in, and they have to write down what the arrangement is.
How many different answers can you get? 1! = 1.
Now for zero boxes? There is only one answer that can be given.

Identity approach
If we define n! to be n*(n1)*(n2)*...*3*2*1 then we
can deduce that (n!)/(n1)! = n. Substituting n=1 we get that
1!/0! = 1, and hence 0!=1.

Another identity
Since the number of ways of choosing r objects from n is
n!/(r!(nr)!), the number of ways of choosing n objects from
n objects is n!/(n!*0!), so 0! must be 1 to make that work.


The number pattern explanation
Look at the following sequence:
40320, 5040, 720, 120, 24, ...
Ask "How does this continue? What's the rule?"
Some work will show that going leftwards involves multiplying
by successive integers, so going rightwards should be dividing
by successive integers:
40320 (divide by 8 gives ...)
5040 (divide by 7 gives ... )
720 (divide by 6 gives ...)
120 (divide by 5 gives ...)
24 (divide by 4 gives ...)
??
This shows clearly the pattern we want.

The "Algorithm" approach.
Here's an algorithm to compute n factorial (written in Python (yes, this is executable code))
F = 1
while n>0:
F = F*n
n = n1
print F
Running through this a few times shows how it works, why it works, and that it gives the right answer for n>0. What answer does it give for n=0?

Credits
Some of these have been suggested by contributors on the TES
teacher bulletin board:

