2017-03-14 14 views
0
def BinarySearch(aList, first, last, target): 

    assert 0 <= first < len(aList); last < len(aList) 

    if len(aList) == 0: 
     return False 
    pos = first + last/2 
    pos = round(pos) 
    if aList[pos] == target: 
     return pos 
    else: 
     if target <= aList[pos]: 
      return BinarySearch(aList[:pos], first, pos, target) 
     else:    
      return BinarySearch(aList[pos +1 :], pos + 1, last, target) 

これは学校の問題で、引数は別の関数によって入力されます。テスト関数は6つの値を持つ配列を渡し、私のコードは最後のものではなく最初の3つを見つけます。再帰バイナリ検索でどこが間違っていますか?

あなたができる
+0

は、リストをスライスならば残りの要素のインデックスに何が起こるか考えてみてください。 – tzaman

+0

は紛失しています。私の考えは、配列の長さが小さいため、私は再帰呼び出しの引数を変更する必要があります。もしそうなら、何をすべきかわからない。 – Tom

+0

'aList [:pos]'は 'pos'の値を含むかどうかですか?ヒント: 'range()'のようにうまく動作します。 – jszakmeister

答えて

0

def BinarySearch(aList, first, last, target): 

    if first < 0 or last < 0 or first > last or first >= len(aList): 
     return -1 

    if len(aList) == 0: 
     return -1 
    pos = (first + last) // 2 
    if aList[pos] == target: 
     return pos 
    elif aList[pos] > target: 
     return BinarySearch(aList, first, pos - 1, target) 
    else:    
     return BinarySearch(aList, pos + 1, last, target) 
関連する問題