我正在尝试解决递归问题。
代码:
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][][][]
我不知道为什么命名变量(但不调用它)会导致输出与其他输出不同。任何有关这方面的见解将不胜感激。
答案 0 :(得分:4)
没有显式return语句的Ruby函数返回最后一个计算表达式。在您的情况下,sorted = []
评估为[]
。因此merge
将始终返回[]
。
对merge
的调用是divide
中的最后一个表达式,因此如果达到该点,它也将返回[]
。
出于这个原因,对于其他人来说,总是用return语句结束函数是个好主意。即使您打算返回最后一个已计算的表达式,它也会使您的意图清晰。如果您打算不返回任何内容,只需写下return
。