#Java - 2 haikus
    protected static
            int factorial(int n) {
        if (n == 0) {
            return n + 1;
        } return factorial(n
                - 1) * n;}

Even when the question isn't [tag:code-golf], I often catch myself golfing the answer. In this case, I golfed the number of haikus.

I pronounce it so:

>protected static<br>
>int factorial int n<br>
>if n is zero

>return n plus one<br>
>return factorial n<br>
>minus one times n

------

Test program:

    class Factorial {                                    // class Factorial
        public static void main(String[]                 // public static void main string
                command_line_run_args) {                 // command line run args
            
            int i = 0;                                   // int i is zero
            while (7 != 0)                               // while seven is not zero
                System.out.                              // System dot out dot

                        println(i + "!"                  // print line i plus not
                                + " = " + factorial(     // plus is plus factorial
                                i += 1));}               // i plus equals 1
    
        protected static
                int factorial(int n) {
            if (n == 0) {
                return n + 1;
            } return factorial(n
                    - 1) * n;}}

Note that this program starts outputting `0`s fast; that is a result of overflow. You could easily get larger correct numbers by changing each `int` to `long`.

Standard pronunciations for `System.out.println` and `public static void main(String[] args)` are reflected in the program.