奇怪的空?识别行为

时间:2017-07-28 23:05:53

标签: arrays ruby recursion ternary-operator

我试图制作一个方法,通过螺旋方式读取一个二维数组来返回一个数组。我使用递归,然后想要在传入的参数数组为空时停止它。

@arr = []

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

然而,当在递归行中添加时,空方法无法识别&#34; []&#34;因为已经空了,并且扔得太深了#34;我假设的错误是一个无限循环,因为它没有停止标准?

1 个答案:

答案 0 :(得分:2)

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

尝试这样的事情:

@arr = []

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