【发布时间】:2019-02-08 21:06:07
【问题描述】:
我一直在学习一些算法,但我找不到我的方法失败的原因。如果您可以查看代码并阐明为什么会发生这种情况。我真的很感激。
我正在尝试编写一种方法,可以递归地对数组进行二进制搜索,到目前为止,这就是我的全部代码。
def recursive_binary_search(arr, target)
max_index = arr.length - 1
mid_index = max_index / 2
if arr[mid_index] > target
new_arr = arr[0..(mid_index - 1)]
recursive_binary_search(new_arr, target)
elsif arr[mid_index] < target
new_arr = arr[(mid_index + 1)..max_index]
recursive_binary_search(new_arr, target)
else
return mid_index
end
end
我不断收到的错误是undefined method '>' for nil:NilClass
【问题讨论】:
-
如果您去掉粘贴代码中的行号,这样我们就可以在此基础上构建并制定解决方案,而不必这样做。
-
请记住,在尝试解决此类问题时,通常最好先创建一个或多个测试用例,然后再编写代码。您的测试用例有助于定义您尝试解决的问题的参数,并确定您何时有解决方案。
-
arr的示例、target的示例以及相关的预期输出可以帮助人们给出答案。 -
这里有一些关于问题构建的建议。 1. 首先用文字陈述你的问题(把你的前两段颠倒过来)。 2. 读者可能希望运行您的代码,无论是否修改。第一步是剪切和粘贴。这里需要第二步来删除行号。最好只显示代码,不要显示行号、IRB 提示等。 3. 如果您给出一个导致您提到的异常的示例,那将会很有帮助...
-
...当你给出一个例子时(更一般地),让一切都成为一个有效的 Ruby 对象(例如,没有
...(etc.),让例子尽可能简洁,为每个输入分配一个变量对象(例如,arr = [1,2,3]),因此读者可以在答案和 cmets 中引用这些变量而无需定义它们,并显示所需的结果(作为 Ruby 对象)。
标签: ruby recursion binary-search