【发布时间】:2011-03-21 18:32:25
【问题描述】:
我有这样的代码
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 和 1000 之间(使用这个参数,我调用第一次函数开始意味着范围开始结束时结束)。比我想在这个范围 (1000+0/)2 中找到中间数字并检查这个数字是否通过有效。如果是,则意味着我的范围号的第一个数字在 0 和 500 之间(在左侧站点 od 划分范围内)。如果不是,则必须在 500 和 1000 之间(划分范围的正确位置)。我想扫描并划分它,直到我得到第一个通过我的有效函数的数字。
-
我希望函数返回这个数字 temp(我正在搜索的范围的第一个数字)。很抱歉没有早点解释这个
标签: ruby recursion binary-search