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)); } }