factorial, while vs recursive