teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

再帰コード追加

2015/11/01 07:24

投稿

ozwk
ozwk

スコア13553

answer CHANGED
@@ -16,4 +16,37 @@
16
16
  ---
17
17
 
18
18
  > すべての変数の値が常に変更されるのは保守の都合上よろしくない。
19
- 確かにその通りですが、このコードはそんなに複雑じゃないと思います。
19
+ 確かにその通りですが、このコードはそんなに複雑じゃないと思います。
20
+
21
+ 変数に再代入が無いように書くとこうなります。
22
+ ```Ruby
23
+ class B
24
+ def binary_search(arr, target)
25
+ left = 0
26
+ right = arr.size - 1
27
+ return binary_search_rec(arr, target, left, right)
28
+ end
29
+
30
+ def binary_search_rec(arr, target, left, right)
31
+ if(left > right)
32
+ return false
33
+ end
34
+ mid = (left + right) / 2
35
+ if(arr[mid] == target)
36
+ return true
37
+ end
38
+ if(arr[mid] < target)
39
+ return binary_search_rec(arr, target, mid+ 1, right)
40
+ end
41
+ return binary_search_rec(arr, target, left, mid- 1)
42
+ end
43
+ end
44
+
45
+ #------------------------------
46
+
47
+ find_at = B.new
48
+ arr = (1..10).to_a
49
+ puts find_at.binary_search(arr, 9) #true
50
+ puts find_at.binary_search(arr, 1) #true
51
+ puts find_at.binary_search(arr, 109) #false
52
+ ```