2013-11-04 214 views

回答

28

當被定義的關閉,它沒有因爲它尚未定義的變量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()