我试图制作一个方法,通过螺旋方式读取一个二维数组来返回一个数组。我使用递归,然后想要在传入的参数数组为空时停止它。
@arr = []
def spiral(array)
array.to_a.empty? ? true : @arr << array.shift
spiral(array.transpose.reverse)
end
然而,当在递归行中添加时,空方法无法识别&#34; []&#34;因为已经空了,并且扔得太深了#34;我假设的错误是一个无限循环,因为它没有停止标准?
答案 0 :(得分:2)
为了停止递归,当达到所需条件时(或者至少不再调用自身),您的函数需要返回。在您的代码中,该函数只生成true
但继续执行,最后调用自身。
尝试这样的事情:
@arr = []
def spiral(array)
return @arr.flatten if array.to_a.empty?
@arr << array.shift
spiral(array.transpose.reverse)
end