vermag ich nicht in Groovy rekursive Schließungen zu nennen 2.1.9Rekursion mit Verschlüssen in Groovy 2.1.9
def facRec = {long n->
return n>1 ? n * facRec(n - 1) : 1
}
Ich erhalte eine TypeMissmatch
vermag ich nicht in Groovy rekursive Schließungen zu nennen 2.1.9Rekursion mit Verschlüssen in Groovy 2.1.9
def facRec = {long n->
return n>1 ? n * facRec(n - 1) : 1
}
Ich erhalte eine TypeMissmatch
Wenn der Verschluss definiert wird, hat es keine Idee der variablen facRec
als es noch nicht definiert worden ist ...
können Sie tun:
def facRec
facRec = {long n->
return n>1 ? n * facRec(n - 1) : 1
}
Um dies zu umgehen, oder Sie können die Innen in einer anderen Verschluss wickeln und den Besitzer des inneren Verschlusses nennen (obwohl ich die oben tun würde dazu neigen, da es einfacher ist zu lesen):
def facRec = {long n->
{ -> n > 1 ? n * owner.call(n - 1) : 1 }()
}
Es sollte beachtet werden, dass beide von ihnen werden für große Werte von n
nicht, wie Sie den Stack überlaufen wird
Sie Trampolin das umgehen können:
def facRec
facRec = { n, count = 1G ->
n > 1 ? facRec.trampoline(n - 1, count * n) : count
}.trampoline()