Ruby 把「;“无”;如果它不在范围内 def二进制搜索(num,测试数组) 计数器=0 低=0 高=测试数组长度 while(低测试_阵列[i] 低=i 结束 计数器+=1 结束 结束 测试_数组=[13,19,24,29,32,37,43] #二进制搜索(35,测试数组)? #二进制搜索(11,测试数组)?
在这段代码中,如果它是二进制搜索(35)或二进制搜索(11),我如何确保它将返回“nil”?正如余浩所提到的,当没有找到任何东西时,它将进入一个无限循环。 下面是一个检查无限循环情况并返回nil的示例Ruby 把「;“无”;如果它不在范围内 def二进制搜索(num,测试数组) 计数器=0 低=0 高=测试数组长度 while(低测试_阵列[i] 低=i 结束 计数器+=1 结束 结束 测试_数组=[13,19,24,29,32,37,43] #二进制搜索(35,测试数组)? #二进制搜索(11,测试数组)?,ruby,Ruby,在这段代码中,如果它是二进制搜索(35)或二进制搜索(11),我如何确保它将返回“nil”?正如余浩所提到的,当没有找到任何东西时,它将进入一个无限循环。 下面是一个检查无限循环情况并返回nil的示例 def binary_search(num, test_array) counter = 0 low = 0 high = test_array.length while (low <= high) do i = ((low + high) / 2).floor;
def binary_search(num, test_array)
counter = 0
low = 0
high = test_array.length
while (low <= high) do
i = ((low + high) / 2).floor;
if num == test_array[i]
return i
break
elsif num < test_array[i]
high = i
elsif num > test_array[i]
low = i
end
counter += 1
end
end
test_array = [13, 19, 24, 29, 32, 37, 43]
# binary_search(35, test array)?
# binary_search(11, test array)?
def二进制搜索(num,测试数组)
计数器=0
低=0
高=测试数组长度
while(低测试_阵列[i]
低=i
结束
计数器+=1
#检查是否找不到值
如果(high-low)正如@YuHao所指出的,当您的元素没有被找到时,它是一个无限循环:low=high=0
(在低端),这使得循环无限期地运行
def binary_search(num, test_array)
counter = 0
low = 0
high = test_array.length
while (low <= high) do
i = ((low + high) / 2).floor;
if num == test_array[i]
return i
break
elsif num < test_array[i]
high = i
elsif num > test_array[i]
low = i
end
counter += 1
# check for value not found
if (high - low) <= 1
return nil
end
end
end
def二进制搜索(num,测试数组)
计数器=0
低=0
高=测试数组长度
while(低测试_阵列[i]
低=i
结束
计数器+=1
如果计数器>测试数组,则中断。长度/2可能更有效
结束
无
结束
测试_数组=[13,19,24,29,32,37,43]
二进制搜索(11,测试数组)#=>nil
二进制搜索(35,测试数组)#=>nil
如果我理解正确,while循环工作后,不是返回nil
还是简单地返回nil
吗?您问的问题是错误的。在您当前的代码中,当找不到元素时,它似乎是一个无限循环。解决了这个问题后,修改返回值是小菜一碟。
def binary_search(num, test_array)
counter = 0
low = 0
high = test_array.length
while (low <= high) do
i = ((low + high) / 2).floor;
if num == test_array[i]
return i
elsif num < test_array[i]
high = i
elsif num > test_array[i]
low = i
end
counter += 1
break if counter > test_array.length / 2 # could probably be more efficient
end
nil
end
test_array = [13, 19, 24, 29, 32, 37, 43]
binary_search(11, test_array) # => nil
binary_search(35, test_array) # => nil