簡體   English   中英

Groovy 2.1.9中的閉包遞歸

[英]Recursion with closures in 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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM