私はIS_VALID関数を渡す0と10000000の間の数値の範囲があり、このこのRubyバイナリ検索コードはなぜ機能しないのですか?
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
のようなコードを持っています。私はこのコードを使用してこの関数を渡す最初と最後の要素を検索したいが、それもclose.Itが無限ループに行くされていないことを仕事とここ
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
私は本当にあなたのコードを理解していません。あなたが(おそらく名詞を使用して)変数名を実装または明示しようとしているアルゴリズムを説明したなら、私はずっと助けることができるでしょう。 – Tom
他の範囲内の同じ範囲を探したい。私は開始が例えば0から1000の間であることを知っています(このparamsは最初の関数呼び出しとは、範囲の開始が終わりのときに終わりを意味します)。この範囲(1000 + 0 /)2の中間の番号を見つけて、この番号が有効かどうかを確認したいと思うよりも、 「はい」の場合は、範囲番号の最初の数字が0と500になります(分割された範囲の左側のサイト)。いいえ、それが500と1000(分割された範囲の右側の場所)になければならない。私は有効な関数を渡す最初の数を得るまでこれをスキャンして分割したいと思います。 – John
そして、この番号のtemp(私が探している範囲の最初の番号)を返す関数が必要です。この前に説明しないと申し訳ありません。 – John