2016-04-17 13 views
-1

私はPythonで再帰的なプログラムを実行しようとしています。リストの最初のインデックスを返します。たとえば、[0、1、5、 6]は0を返します。しかし、最後のリストを渡すと1が返されます。理由はわかりません。リストを返す[i] = iリストのインデックス

コード:

def index(list): 
    """Returns the first index of the list where list[i] == i""" 
    return __auxindex(list, 0, len(list) - 1) 


def __auxindex(list, start, end): 
    if start < end: 
     half = (start + end) // 2 
     if list[half] == half: 
      return half 
     elif list[half] > half: 
      return __auxindex(list, start, half) 
     else: 
      return __auxindex(list, half + 1, end) 
    else: 
     return start 

list = input('Values (,): ').split(', ') 
list = [int(i) for i in list] 
print(index(list)) 

EDIT:私はリストを命じなければならないことを忘れていました。したがって、このコードは動作します。

+0

これはいつでも行うのですか、特定の入力のみですか?後者の場合は、どちらか?どちらの場合でも、何を返すべきですか? –

+0

私は[0、1、5、6]を初めて渡すときに0を返しますが、私は再び1を返します。 –

+1

変数名としてリストを使用しないでください。一致するインデックス?また、 '[0、1、5、6]'ではなく0を返します。 –

答えて

3

途中でインデックスを開始しました。フロア分割を使用しているので、それはインデックス1になります。さて、インデックス1のリストは1なので、それは一致し、half1を返します。代わりにあなたがする必要があるのは、最初から始まり、最後まで働くことです。このようなもの:

def index(number_list, start=0): 
    if start >= len(number_list): 
     return -1 
    elif number_list[start] == start: 
     return start 
    else: 
     return index(number_list, start+1) 
+0

真ですが、OPには再帰的な解決策が必要です。あなたの解答は再帰的ではないので、私は投票しました。 –

+0

私は混乱しています、Pythonでの再帰はJavaのように機能しますか? –

+0

@MarcoCanora:すみません。私は再帰*に気付かなかった。あなたはまだ冒頭から始めて、最後まで作業しなければなりません。私は編集しました。 – zondo