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