Groovy のクロージャは自身を代入した変数を介した再帰呼び出しができない、らしい

…ので、代わりに this を使うのだとか。

factorial = {if (it == 0) {return 1} else {return it * this(it - 1)}} 

でも、無限倍精度に対応していないらしく、12! 以上は計算できません。orz