使用递归在Ruby中定义排序方法?

时间:2016-01-31 17:40:23

标签: ruby sorting recursion

我正在研究LTP by Chris Pine,第10章 - 尝试使用递归创建我自己的排序方法。我已经完成了没有递归,但我无法弄清楚为什么这个递归方法不起作用。它返回一个空数组&那么两个“零”阵列。

words = ["this", "that", "Patrick", "Svetlana", "USA", "aviation", "that"]

def sort_r(array, sorted_array=[])
  sorted_array.push(array.min)

  if array != []
    array.delete_at(array.index(array.min))
    sort_r(array, sorted_array)
  end

  p sorted_array
end

p sort_r(words)

1 个答案:

答案 0 :(得分:0)

nil在最后一次递归迭代中的结果末尾添加,因为array在这种情况下为[],并且您将min从空数组推入在你的函数的第一行sorted_array

if array != []删除min后,您需要检查array,如果[]

,请避免调用递归方法

您的代码可以简化为:

words = ["this", "that", "Patrick", "Svetlana", "USA", "aviation", "that"]

def sort_r(array, sorted_array=[])
  sorted_array << array.delete_at(array.index(array.min))
  sort_r(array, sorted_array) unless array.size.zero?
  sorted_array
end

p sort_r(words)
#=> ["Patrick", "Svetlana", "USA", "aviation", "that", "that", "this"]