Func<int,int> fib = null; fib = n => n > 1 ? fib(n - 1) + fib(n - 2) : n;
delegate Func<A,R> Recursive<A,R>(Recursive<A,R> r); static Func<A, R> Y<A, R>(Func<Func<A, R>, Func<A, R>> f) { Recursive<A, R> rec = r => a => f(r(r))(a); return rec(rec); }
Func<int,int> fib = Y<int,int>(f => n => n > 1 ? f(n - 1) + f(n - 2) : n);