如果有一个测试,需要将增量添加到特定值,则可以按以下顺序测试增量:1、2、3、... 15、16。
但是用越来越细的粒度来测试,delta可以是这样的序列:1,16,8,4,12,...(也就是我们尝试1和16,这是两种极端情况,然后我们尝试8 ,它是一个中间数字,然后是 4,它是 1 和 8 的中间,然后是 12,它是 8 和 16 的中间)。
如何优雅地生成这个序列而没有重复?
现在我在 Ruby 1.9.3 中有这个:
$deltas = []
def getMidPoint(a, b)
return if (a - b).abs <= 1
midPoint = ((a + b) / 2).to_i
puts "a = #{a}, b = #{b}, midPoint = #{midPoint}"
$deltas << midPoint
getMidPoint(a, midPoint)
getMidPoint(midPoint, b)
end
$deltas << 1
$deltas << 16
getMidPoint(1, 16)
p $deltas
但结果是:
[1, 16, 8, 4, 2, 3, 6, 5, 7, 12, 10, 9, 11, 14, 13, 15]
我实际上可以在数字上加一个“级别”(存储为元组):所以对于 8,它是级别 2,对于 12,它也是级别 2(级别是递归级别),然后在最后,我可以收集1级,然后2级等的数字,以获得最终的数组,它应该可以工作,但是有更好的解决方案吗?