Ruby 把「;“无”;如果它不在范围内 def二进制搜索(num,测试数组) 计数器=0 低=0 高=测试数组长度 while(低测试_阵列[i] 低=i 结束 计数器+=1 结束 结束 测试_数组=[13,19,24,29,32,37,43] #二进制搜索(35,测试数组)? #二进制搜索(11,测试数组)?

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;

在这段代码中,如果它是二进制搜索(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;
    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