我正在研究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)
答案 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"]