2013-11-04 175 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()