I came up with a way to reduce the amount of if's/checks.
It works by constructing sth like a list, with every node storing a number. The first node is of a different class than the other nodes.
Now when I call the n'th node to calculate factorial it only does this:
return value * pre.factorial();
Since the first node is of a different class it only does this:
The thing is it's not faster than the regular recursive factorial...