10年目のFizzBuzz改善

ほぼ10年前にFizzBuzzを書いていた。
落ち着かないのでFizzBuzz書いた - きしだのHatena

当時としてはがんばったほうなのだけど、改めてみると改善ポイントがみつかった。
よりコンパクトになった。やはりコピペコードいくない。
あと、オブジェクト指向など実業務では使いものにならない!newなんてムダだってことで、全部staticメソッドにした。
あいかわらず数値は出せてないけども。

package kis.sample;

public class FizzBuzz {
    public static void main(String[] args) {
        n(0);
    }
    static void n(int i){
        if(i % 3 == 0){
            if(i % 5 == 0){
                fizzbuzz(i + 1);
            }else{
                fizz(i + 1);
            }
        }else{
            if(i % 5 == 0){
                buzz(i + 1);
            }else{
                n(i + 1);
            }
        }
    }
    
    static void fizz(int i){
        // fizzの直後にfizzが来ることはない
        if(i % 5 == 0){
            buzz(i + 1);
        }else{
            n(i + 1);
        }
    }
    static void buzz(int i){
        // buzzの直後にbuzzが来ることはない
        if(i % 3 == 0){
            fizz(i + 1);
        }else{
            n(i + 1);
        }
    }
    static void fizzbuzz(int i){
        // fizzbuzzの直後はnのみ
        n(i + 1);
    }
}

結果

Exception in thread "main" java.lang.StackOverflowError
    at kis.sample.FizzBuzz.fizz(FizzBuzz.java:28)
    at kis.sample.FizzBuzz.buzz(FizzBuzz.java:34)
    at kis.sample.FizzBuzz.n(FizzBuzz.java:16)
    at kis.sample.FizzBuzz.fizz(FizzBuzz.java:28)
    at kis.sample.FizzBuzz.n(FizzBuzz.java:12)
    at kis.sample.FizzBuzz.n(FizzBuzz.java:18)
    at kis.sample.FizzBuzz.fizzbuzz(FizzBuzz.java:41)
    at kis.sample.FizzBuzz.n(FizzBuzz.java:10)
    at kis.sample.FizzBuzz.n(FizzBuzz.java:18)
    at kis.sample.FizzBuzz.fizz(FizzBuzz.java:28)
    at kis.sample.FizzBuzz.n(FizzBuzz.java:12)
    at kis.sample.FizzBuzz.buzz(FizzBuzz.java:36)
    at kis.sample.FizzBuzz.fizz(FizzBuzz.java:26)
    at kis.sample.FizzBuzz.n(FizzBuzz.java:12)
    at kis.sample.FizzBuzz.n(FizzBuzz.java:18)
    at kis.sample.FizzBuzz.fizz(FizzBuzz.java:28)
    at kis.sample.FizzBuzz.buzz(FizzBuzz.java:34)
    at kis.sample.FizzBuzz.n(FizzBuzz.java:16)
    at kis.sample.FizzBuzz.fizz(FizzBuzz.java:28)
    at kis.sample.FizzBuzz.n(FizzBuzz.java:12)
    at kis.sample.FizzBuzz.n(FizzBuzz.java:18)
    at kis.sample.FizzBuzz.fizzbuzz(FizzBuzz.java:41)
    at kis.sample.FizzBuzz.n(FizzBuzz.java:10)
    at kis.sample.FizzBuzz.n(FizzBuzz.java:18)
    at kis.sample.FizzBuzz.fizz(FizzBuzz.java:28)
    at kis.sample.FizzBuzz.n(FizzBuzz.java:12)
    at kis.sample.FizzBuzz.buzz(FizzBuzz.java:36)
    at kis.sample.FizzBuzz.fizz(FizzBuzz.java:26)
    at kis.sample.FizzBuzz.n(FizzBuzz.java:12)
...