2016-04-23 81 views
0

我想在C++中實現遞歸二進制搜索。但是我的算法找不到測試數組中的最後兩個元素。我知道我錯過了一些東西。我已經搜索了很多二進制搜索算法的實現,但沒有成功。任何人都可以幫助我嗎?遞歸二進制搜索沒有if-else語句的C++

bool isMember (int x, int a[], int size){ 
    if (size == 0) return false; 
    return a[size/2] == x || 
      (a[size/2] < x && isMember (x,a+size/2,(size)/2)) || 
      (a[size/2] > x && isMember (x,a,(size)/2)); 
} 
+0

你怎麼知道它是你的中間元素沒有一個if語句? – MeetTitan

+0

'member'函數做什麼? –

+0

@MeetTitan a [size/2]表示每次遞歸調用的中間元素。我的錯是我的意思。 – yanis

回答

3

沒有if陳述這裏:

#include <iostream> 

bool isMember (int x, int a[], int size) 
{ 
    return size == 0 ? false 
     : a[size/2] == x ? true 
     : a[size/2] > x ? isMember(x, a, size/2) 
     : isMember(x, a+size/2+1, size-(size/2+1)); 
} 

int main() 
{ 
    int v[]={1,2,4,8,16}; 

    for (int i=0; i<20; ++i) 
     std::cout << i << ": " << isMember(i, v, 5) << std::endl; 
    return 0; 
} 

輸出:

0: 0 
1: 1 
2: 1 
3: 0 
4: 1 
5: 0 
6: 0 
7: 0 
8: 1 
9: 0 
10: 0 
11: 0 
12: 0 
13: 0 
14: 0 
15: 0 
16: 1 
17: 0 
18: 0 
19: 0 
+0

哈哈沒有'如果',只有三元操作符:D很好,很好,我喜歡它。 – Vucko

+0

在沒有三元運算符的情況下將方法中的參數從其工作的問題中更改。 – yanis

+0

你不能改變這個問題。如果您想要更改要求,請提出一個新問題(是的,即使沒有三元運算符也很容易)。 –