【问题标题】:Empty arrays returned in Ruby recursionRuby 递归中返回的空数组
【发布时间】:2015-11-10 19:54:04
【问题描述】:

我正在尝试解决递归问题。

代码:

def divide(array)
  half = array.length/2
  return array if array.length == 1
  print ary1 = divide(array[0..half - 1])
  print ary2 = divide(array[half..-1])
  merge(ary1, ary2)
end
def merge(ary1, ary2)
  sorted = []
end

divide([10,9,8,-300,250,1,7,6,5,4,3,2])

如果我不注释掉sorted 变量,它会返回一些与数字混合的空白数组:

[10][9][8][][][-300][250][1][][][][7][6][5][][][4][3][2][][][]

我不知道为什么命名一个变量(但不调用它)会导致不同的输出。对此的任何见解将不胜感激。

【问题讨论】:

    标签: arrays ruby recursion


    【解决方案1】:

    没有显式 return 语句的 Ruby 函数返回最后一个计算的表达式。在您的情况下,sorted = [] 的计算结果仅为[]。所以merge 将永远返回[]

    merge 的调用是divide 中的最后一个表达式,因此如果到达该点,它也会返回[]

    出于这个原因以及其他原因,最好始终使用 return 语句结束函数。即使您打算返回最后一个评估的表达式,它也会使您的意图明确。如果您不打算返回任何内容,请写return

    【讨论】:

      猜你喜欢
      • 2021-08-14
      • 2020-04-08
      • 1970-01-01
      • 2014-10-03
      • 2020-10-10
      • 2016-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多