var fact = x => x == 1 ? 1 : x * fact(x - 1);

これがコンパイル通らないのなんとかしてほしい

Func<int, int> fact = null;
fact = x => x == 1 ? 1 : x * fact(x - 1);

現状だとこんな風に書かなきゃいけない。

こういうケースの場合はクロージャに与えたローカル変数を書き換える必要があるんだよな