Recursion Groovy 2.1.9中带闭包的递归

Recursion Groovy 2.1.9中带闭包的递归,recursion,groovy,Recursion,Groovy,我无法在Groovy 2.1.9中调用递归闭包 def facRec = {long n-> return n>1 ? n * facRec(n - 1) : 1 } 当定义闭包时,我得到一个TypeMissmatch,它不知道变量facRec,因为它还没有被定义 你可以做: def facRec facRec = {long n-> return n>1 ? n * facRec(n - 1) : 1 } 要解决这个问题,或者可以将内部封装到另一个闭

我无法在Groovy 2.1.9中调用递归闭包

def facRec = {long n->
    return n>1 ? n * facRec(n - 1) : 1
}

当定义闭包时,我得到一个TypeMissmatch,它不知道变量facRec,因为它还没有被定义

你可以做:

def facRec
facRec = {long n->
    return n>1 ? n * facRec(n - 1) : 1
}
要解决这个问题,或者可以将内部封装到另一个闭包中,并调用该内部闭包的所有者(尽管我倾向于执行上述操作,因为这样更容易阅读):

应该注意的是,如果
n
的值较大,这两种方法都会失败,因为会使堆栈溢出

你可以用蹦床绕过这个:

def facRec
facRec = { n, count = 1G ->
    n > 1 ? facRec.trampoline( n - 1, count * n ) : count
}.trampoline()
def facRec
facRec = { n, count = 1G ->
    n > 1 ? facRec.trampoline( n - 1, count * n ) : count
}.trampoline()