13
我无法递归调用封在Groovy 2.1.9递归与Groovy闭2.1.9
def facRec = {long n->
return n>1 ? n * facRec(n - 1) : 1
}
我得到一个TypeMissmatch
我无法递归调用封在Groovy 2.1.9递归与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
}
为了解决这个问题,或者你可以包裹内到另一个封闭并调用内部封闭的所有者(虽然我会倾向于做上面,因为它更容易阅读):
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()