Java : Y Combinator

Java高階関数がかけたところで、今度は例のmemoizeとfixの問題「[id:lethevert:20050904:p3]」を解いてみましょう。
追記)FixとFibMakerの関係を逆にしました。
追記2)もっとシンプルにしてみました。
追記3)メモ化版も追加

abstract class Fix {
  abstract int maker(int x);
  int call(int x) { return maker(x);}
}

abstract class FixMemo extends Fix {
  private int[] memo = new int[100];
  FixMemo() { for(int i=0; i<100; ++i) { memo[i] = -1;}}
  int call(int x) { return memo[x] >=0 ? memo[x] : maker(x);}
}

public class Main {
  public static void main(String[] args) {
    Fix fib = new FixMemo()
      { int maker(int x) { return x<=1 ? 1 : call(x-1)+call(x-2);}};
    
    //テスト用
    System.out.println(fib.call(1));
    System.out.println(fib.call(2));
    System.out.println(fib.call(3));
    System.out.println(fib.call(4));
    System.out.println(fib.call(5));
  }
}