[英]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.