2017-07-28 80 views
0

我试图做一个方法,从螺旋读取2d数组返回一个数组。我使用递归,然后想要在传入的参数数组为空时停止它。奇怪的空?识别行为

@arr = [] 

def spiral(array) 
    array.to_a.empty? ? true : @arr << array.shift 
    spiral(array.transpose.reverse) 
end 

然而,在递归线添加当空方法没有认识到“[]”为空了和抛出“堆栈级别太深”错误,我假定是一个无限循环,因为它具有没有停止标准?

+0

'array.to_a.empty? ?返回:@arr << array.shift' – frozen

回答

2

为了停止递归,当达到所需条件(或者至少不会再次调用自己)时,您的函数需要返回。在你的代码中,该函数只生成true,但继续执行,最后调用它自己。

尝试是这样的:

@arr = [] 

def spiral(array) 
    return @arr.flatten if array.to_a.empty? 
    @arr << array.shift 
    spiral(array.transpose.reverse) 
end 
+0

非常感谢,非常快!是的,我现在明白了。在这种情况下,我想返回@ arr.flatten。 – pyan