arrays - Ruby 递归中返回空数组

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

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

最佳答案

没有显式 return 语句的 Ruby 函数返回最后计算的表达式。在您的情况下,它是 sorted = [] ,其计算结果仅为 []。因此 merge 将始终返回 []

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

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

关于arrays - Ruby 递归中返回空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32062909/

相关文章:

arrays - 用于填充 SWIFT 中 Tableview 部分的结构体和数组

java - 如何比较日期数组值

Ruby - 打印答案 "if own answer (itself)"

ruby-on-rails - 执行 heroku 创建时找不到 libtermcap.so.2 文件

algorithm - 递归与非递归排序算法

c - 部分排序数组 C

arrays - 我在 Playground 上有一个带有 Swift 2.1.1 的 EXC_BAD_INSTRUCTION,需要帮助来识别它

ruby-on-rails - Rails 多种帖子类型 : nested forms and complex association

python - python 中的指数退避实现

ruby - 斐波那契数列递归的解释