Чтобы обойти это, или вы можете обернуть внутреннее в другое закрытие и вызвать владельца этого внутреннего закрытия (хотя я бы старался сделать это выше, поскольку его легче читать):
def facRec = {long n->
{ -> n > 1 ? n * owner.call( n - 1 ) : 1 }()
}
Следует отметить, что оба этих параметра будут терпеть неудачу при больших значениях n, поскольку вы переполните стек
Вы можете использовать батут, чтобы обойти это:
def facRec
facRec = { n, count = 1G ->
n > 1 ? facRec.trampoline( n - 1, count * n ) : count
}.trampoline()