我正在尝试创建一个方法,通过螺旋式读取2d数组来返回数组。我使用递归,然后希望在传入的参数数组为空时停止它。
@arr = []
def spiral(array)
array.to_a.empty? ? true : @arr << array.shift
spiral(array.transpose.reverse)
end
但是,当在递归行中添加空方法时,它无法识别"[]“是空的,并抛出一个”堆栈级别太深“的错误,我假设它是一个无限循环,因为它没有停止条件?
发布于 2017-07-28 23:11:47
为了停止递归,您的函数需要在达到所需条件时返回(或者至少不再调用自己)。在您的代码中,函数只生成true
,但继续执行,在结束时调用自己。
试着做这样的事情:
@arr = []
def spiral(array)
return @arr.flatten if array.to_a.empty?
@arr << array.shift
spiral(array.transpose.reverse)
end
https://stackoverflow.com/questions/45383557
复制相似问题