编辑两个
我注意到在运行程序时,它还返回nil
作为数组中的最后一项。为了解决这个问题,我改变了我的状况。
if array_list.empty? ----> if array_list.length == 1
这将返回没有nil
修改 感谢@mudasobwa的帮助。
他指出我的程序出了几个问题:一个是我用array编写array.index而不是required()
还了解到我不应该在方法名称及其参数之间放置空格。
此处更新了代码,查看原始内容以了解其更改方式。
list_one = ["apple", "anna", "banana", "peach", "cherry", "kiwi", "pineapple"]
def sort_array(array_list, sorted_array=[])
sorted_array.push(array_list.min)
if array_list.empty? || array_list.nil?
return sorted_array
else
array_list.delete_at(array_list.index(array_list.min))
return sort_array(array_list, sorted_array)
end
end
sort_array(list_one)
如果有人有其他改进或建议,请告诉我。实际上,这个递归函数似乎完美无缺,尽管我还有很多东西可以学习如何在将来实现递归函数。我的大脑很难缠绕它。
结束编辑,原版以下
我正在阅读Chris Pine的书“学习编程”,其中一个练习是制作一个递归排序方法来对项目列表进行排序。
这是我的代码:
list_one = ["apple", "anna", "banana", "peach", "cherry", "kiwi", "pineapple"]
def sort_array (array_list, sorted_array=[])
sorted_array = sorted_array
sorted_array.push(array_list.index[array_list.min])
if array_list.empty?
return sorted_array
else
array_list.delete_at(array_list.index[array_list.min])
return sort_array(array_list, sorted_array)
end
end
sort_array (list_one)
现在,克里斯的书要求使用我尝试合并的包装函数,但在这种情况下它并没有任何区别。刚刚提出这个问题有点令人难以置信,我需要阅读更多关于递归函数的信息来达到这一点。
运行时,我收到标题中列出的错误。我还没有运气再搞清楚这一点,所以我希望这里的某个人可以解释一下我可能做错了什么。
如果我加入Chris的包装函数:
def sortme (some_array)
sort_array(some_array, [])
end
错误保持不变,考虑到包装函数只是调用sort_array函数,这是有道理的。在这种情况下,我真的不需要它。
有什么想法?为什么我收到此错误?
答案 0 :(得分:1)
问题在于:
sorted_array.push(array_list.index[array_list.min])
sorted_array.push(array_list.index(array_list.min))
# or sorted_array.push(array_list[array_list.min])
此代码有两个(或更多)故障:
sorted_array = sorted_array
是一个noop。你想用它完成什么?
并且,通常,永远不会在方法名称和开始括号之间放置一个空格,从而启动它的参数列表。在某些情况下,它可能无法正常工作。