皆様、質問がございます。 よろしくお願い申し上げます。 下記のコードで、arr_size = 10 value = 9の時に式が成り立たないと予測したのですが、結果として処理されてしまいました。 処理が成り立たないと考えた理由 left <= rightの条件を3回めの処理の時に守れない、つまりFalseになるため。 (詳細は下記に記述致しました。) 一番の疑問 while式 + If式の詳細な処理構造を理解していない点であり、そのために正しい予測ができていないと考えます。 個人的な意見 「すべての変数の値が常に変更されるのは保守の都合上よろしくない。」
##探索する値を毎回「1」ずつ減算していく場合。
「arr.size-1を用いて減算していく。」 class B def binary_search(arr_size, value) arr = (1..arr_size).to_a left = 0 right = arr.size-1 mid = 0 while left <= right do mid = (left + right) / 2 if arr[mid] == value return "Found!" elsif arr[mid] < value left = mid + 1 else right = mid - 1 end end end end find_at = B.new puts find_at.binary_search(10, 9)
一回目
Left = 0 Right = 9, 9 / 2 = 4(0から数えるため5つめの値が4になる) if式により、4 + 1 = 5 midlle = 0
二回目
Left = 5 Right = 8, 5 + 8 / 2 = 7 => if式により7 + 1= 8 middle = 4
三回目
この時、while式のleft <= rightによりfalseとなるため、計算終了。 となるはずですが、if式は処理され、Foundの結果が出力されます。 Left = 8 Right = 7
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。