【问题标题】:Strange empty? recognition behavior奇怪的空?识别行为
【发布时间】:2018-01-05 02:49:09
【问题描述】:

我正在尝试创建一个从螺旋读取二维数组返回数组的方法。我正在使用递归,然后想在传入的参数数组为空时停止它。

@arr = []

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

但是,在递归行中添加时,空方法无法将“[]”识别为空,并抛出“堆栈级别太深”错误,我认为这是一个无限循环,因为它没有停止标准?

【问题讨论】:

  • array.to_a.empty? ? return : @arr &lt;&lt; array.shift

标签: arrays ruby recursion ternary-operator


【解决方案1】:

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

试试这样的:

@arr = []

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

【讨论】:

  • 非常感谢,很快!是的,我现在明白了。在这种情况下,我想返回 @arr.flatten。
猜你喜欢
  • 2019-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-14
  • 1970-01-01
  • 1970-01-01
  • 2013-01-04
相关资源
最近更新 更多