Ruby递归中返回的空数组

时间:2015-08-18 03:11:33

标签: arrays ruby recursion

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

代码:

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][][][]

我不知道为什么命名变量(但不调用它)会导致输出与其他输出不同。任何有关这方面的见解将不胜感激。

1 个答案:

答案 0 :(得分:4)

没有显式return语句的Ruby函数返回最后一个计算表达式。在您的情况下,sorted = []评估为[]。因此merge将始终返回[]

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

出于这个原因,对于其他人来说,总是用return语句结束函数是个好主意。即使您打算返回最后一个已计算的表达式,它也会使您的意图清晰。如果您打算不返回任何内容,只需写下return