我有这样的代码
def search(begins, ends)
puts "Searching for #{begins}- #{ends}"
temp = ((begins + ends) / 2).to_i
if is_valid? temp
if (ends - begins).abs < 3 # the result is between a and 2 digits than b
return temp # recursion ends
else
search(begins, temp)
end
else
search(temp, ends)
end
end
0到10000000之间有一系列数字传递is_valid函数。我想找到使用此代码传递此函数的第一个和最后一个元素,但它不起作用它甚至不接近。它进入无限循环,这里有几行输出
Searching for 0- 14981245
Searching for 0- 7490622
Searching for 3745311- 7490622
Searching for 3745311- 5617966 # good result
Searching for 3745311- 4681638
Searching for 3745311- 4213474
Searching for 3745311- 3979392
Searching for 3745311- 3862351
Searching for 3745311- 3803831
Searching for 3745311- 3774571
Searching for 3759941- 3774571
Searching for 3759941- 3767256
Searching for 3759941- 3763598
Searching for 3759941- 3761769
Searching for 3759941- 3760855
Searching for 3760398- 3760855
Searching for 3760626- 3760855
答案 0 :(得分:0)
查看您编写的代码:其中的任何内容都不会导致ends
在您声明的位置接近3745311。 3745311 + 7490622是11235933,除以2给我们5617966,就像你看到的一样。 5617966 - 3745311远大于3,所以它再计算3745311 + 5617966,即4681638 - 就像你看到的一样。
我想也许你想使用ends / 2
而不是(begins + ends) / 2
。这将使你在期待的时候成为3745311。