您永远不会检查是否i
大于 的长度input2
,并且在 Groovy 中,会超出 a 的List
长度null
所以在第一个元素上,它将继续循环
if (element == input2[i]) {
对于不断增加的 值,每次都i
调用该函数,因为它永远不会匹配common
a
猜测你正在尝试做什么,这都可以重写为:
def input1 = ['a','b','e','r','t']
def input2 = ['v','n','m','y']
def ans = input1.intersect( input2 )
但是很难确定你想要什么,你也没有明确说出来。
编辑
避免堆栈溢出的一种深度递归方法是使用Groovy 的蹦床方法。
def common
common = { Object element, Collection list ->
if( list.size() == 0 ) { // element not found. Return null
null
}
else if( list.head() == element ) { // element found. Return it
element
}
else {
common.trampoline( element, list.tail() ) // Trampoline down the list and check again
}
}
common = common.trampoline()
def elements = ['a','b','e','v','r','t'].collect { // For each element in this list
common( it, ['v','n','m','y'] ) // Find if it's in our other list
}.findAll() // And remove the nulls
assert elements == [ 'v' ]
但是我仍然会intersect
在这种情况下使用,上面只是展示了 Groovy 的一种方法,你可以避免太深的递归......