加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在Groovy中递归关闭2.1.9

发布时间:2020-12-14 16:35:02 所属栏目:大数据 来源:网络整理
导读:我无法在Groovy 2.1.9中调用递归关闭 def facRec = {long n- return n1 ? n * facRec(n - 1) : 1} 我得到一个TypeMissmatch 解决方法 当定义闭包时,它不知道变量facRec,因为它还没有定义… 你可以做: def facRecfacRec = {long n- return n1 ? n * facRec(n
我无法在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()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读